Variables
| Edad |
1 |
| Género |
2 |
| Clase social |
3,17,18,20,21 |
| Nivel educativo alcanzado |
5,17,18 |
| Tipo de trabajo |
6,18,21 |
| Frecuencia de salida |
7,18,19 |
| Lugar donde vive (distrito) |
4,17,18,20 |
| Cantidad de infectados por dia |
14,19 |
| Justificacion de salida |
9,15 |
| Medidas aplicadas |
10,16,17,18,19 |
| Factores |
22,23 |
#Descriptores numéricos para las variables de mayor importancia:
##Variables Data web
-Cantidad de personas que se movilizan en las calles antes y después de cada una de las medidas, Tiempo, Medidas aplicadas:
*Media (valor): permitirá conocer en promedio cuántos ciudadanos limeños se movilizan antes y después de la medida
*Mediana, cuartiles (valor): permitirá saber cuántos ciudadanos limeños se movilizan al 25%, 50%; 75%, 100% del tiempo de estudio, de esta manera se conocerá el efecto de la movilización con el transcurso del tiempo para cada medida.
*Desviación estándar: permitirá saber cuántas son las variaciones promedio de movilización social respecto a la media
-Cantidad de infectados por día, Tiempo:
*Media(valor): permitirá conocer cuánto es la tasa infectados que hubo en promedio antes y después de medida aplicada
*Mediana, cuartiles (valor): permitirá saber cuántos infectados hubo al 25%, 50%;75%, 100% del tiempo de estudio, de esta manera se conocerá el efecto del número de infectados con el transcurso del tiempo para cada medida.
*Desviación estándar: permitirá saber cuántas son las variaciones promedio de infectados respecto a la media.
#Variables Encuestas
-Frecuencia de salida promedio a la semana ,antes y después de cada medida del gobierno
Mediana, cuartiles (valor): permitirá saber cuántas salidas a la semana representa 25%,50%,75% de los ciudadanos de Lima encuestados para cada medida
Moda (valor): permitirá saber la frecuencia de salida mayoritaria de los ciudadanos de Lima encuestados
-Tipo de trabajo, Frecuencia de salida promedio a la semana ,antes y después de cada medida del gobierno
Variable dicotomizada Tipo de trabajo=0,1
Coeficiente de correlación biserial: indicará cuán relacionado está el tipo de trabajo con la frecuencia de salida
-Edad, Frecuencia de salida promedio a la semana ,antes y después de cada medida del gobierno, Medida aplicada
Media: permitirá conocer la edad promedio para cada frecuencia de salida promedio y para cada medida
Coeficiente de correlación biserial: indicará cuán relacionado está la edad con la frecuencia de salida
-Distrito, Frecuencia de salida promedio a la semana ,antes y después de cada medida del gobierno y medida aplicada
Moda(valor): permitirá conocer en qué distrito inciden más en las veces de salida de las personas
-Clase social
Moda(valor): permitirá conocer el nivel de ingresos por cada distrito.
#Descriptores gráficos
Utilizaremos:
Gráfica de dispersión para notar fácilmente como aumenta o decrece la cantidad de infectados e infectados por dia antes y después de que se aplique la medida. Además, la gráfica de dispersión nos puede ayudar a encontrar una relación y/o patrón entre la cantidad de infectados y/o movilización social y los días transcurridos desde que se empleó cada medida.
También utilizaremos un gráfico de caja de bigotes para diferenciar las edades de los entrevistados de manera rápida y efectiva. Esto nos permitirá ver la relación entre las edades y respuestas dadas por las personas.
Además, se utilizarán gráficos de barras principalmente para visualizar y analizar las respuestas cualitativas. Con los gráficos de barras se podrán ver cuales han sido las respuestas cualitativas respondidas con más y menos frecuencia.
Finalmente, se usarán histograma para describir las variables cuantitativas que pueden ser distribuidas en rangos. Esto nos facilitará analizar los datos con muchos valores o respuestas posibles.
Plots y otras cosas
# curl -Ls "$url" > df_form.csv
tmp <- tempfile()
curl_download("https://docs.google.com/spreadsheets/d/e/2PACX-1vS5FwsKHl4PhukIHfSGbfA8NCQ5SqBDpQ16KC69JCiFAWVeJ40BACp0dqhBTkHi9cpLE_JmEmIvfdvA/pub?gid=637100843&single=true&output=csv", tmp)
read_csv(tmp) -> df_form1
Parsed with column specification:
cols(
.default = col_character(),
`¿Cuál es tu edad?` = col_double(),
`¿Cuántas veces a la semana, en promedio, salías de casa durante los días de cuarentena?` = col_double(),
`Respecto a la anterior pregunta. Del 0 al 5, ¿ En cuánto disminuyó tus salidas durante la cuarentena?` = col_double(),
`Respecto a la anterior pregunta. Del 0 al 5, ¿Cuánto te desanimó salir de casa?` = col_double(),
`Respecto a la anterior pregunta. Del 0 al 5, ¿Cuánto cambio tus salidas?` = col_double(),
`Respecto a la anterior pregunta. Del 0 al 5, ¿Cuán menores fueron tus salidas?` = col_double(),
`Respecto a la anterior pregunta. Del 0 al 5, ¿Cuánto se redujo tus salidas?` = col_double(),
`Respecto a la anterior pregunta. Del 0 al 5, ¿ Cuán más te mantuviste en casa?` = col_double(),
`Respecto a la anterior pregunta. Del 0 al 5, ¿Cuánto tiempo más te mantuvo en casa?` = col_double()
)
See spec(...) for full column specifications.
# Segunda encuesta
tmp <- tempfile()
curl_download("https://docs.google.com/spreadsheets/d/e/2PACX-1vS5FwsKHl4PhukIHfSGbfA8NCQ5SqBDpQ16KC69JCiFAWVeJ40BACp0dqhBTkHi9cpLE_JmEmIvfdvA/pub?gid=637100843&single=true&output=csv", tmp)
read_csv(tmp) %>%
rename(
tiempo = "Marca temporal",
edad = "¿Cuál es tu edad?",
genero = "¿De qué género eres?",
ingreso = "¿Cuánto es el ingreso mensual promedio de tu familia aproximadamente (soles) ?",
distrito = "¿En qué distrito vives?",
estudio = "¿Cuál fue el último nivel educativo que completaste?",
empleo = "¿Cuál es tu tipo de empleo?",
salidas = "¿Cuántas veces a la semana, en promedio, salías de casa durante los días de cuarentena?",
razones = "¿Por qué razones salías durante la cuarentena?",
social.bool = "¿La medida de \"Inmovilización social\", realmente hizo que tus salidas durante toda la cuarentena fueran muy pocas?",
social.05 = "Respecto a la anterior pregunta. Del 0 al 5, ¿ En cuánto disminuyó tus salidas durante la cuarentena?",
ocio.bool = "¿ La \"Suspensión de acceso a lugares públicos: lugares de ocio, restaurantes, etc\", te desanimó salir de casa?",
ocio.05 = "Respecto a la anterior pregunta. Del 0 al 5, ¿Cuánto te desanimó salir de casa?",
noday.bool = "¿La medida \"Disposición salida de hombres y mujeres en días complementarios (lunes-miércoles-viernes / martes-jueves-sábados)\", garantizo que salieras menos que antes?",
noday.05 = "Respecto a la anterior pregunta. Del 0 al 5, ¿Cuánto cambio tus salidas?",
multa.bool = "¿ La medida \"Multa de S/.86 -S/.340 para todas las personas que desobedecen disposiciones del gobierno\", hizo que tus salidas de casa fueran menores?",
multa.05 = "Respecto a la anterior pregunta. Del 0 al 5, ¿Cuán menores fueron tus salidas?",
bono.bool = "¿ La medida \"Entrega de bono S/. 380, S/.760 de acuerdo al Sistema de Focalización de Hogares (SISFOH) \", permitió que redujeras tus salidas de casa?",
bono.05 = "Respecto a la anterior pregunta. Del 0 al 5, ¿Cuánto se redujo tus salidas?",
afp1.bool = "¿ La medida \"Retiro de hasta S/. 2000 de fondos AFP de trabajadores afiliados que no tienen planilla\", te mantuvo más tiempo en casa?",
afp1.05 = "Respecto a la anterior pregunta. Del 0 al 5, ¿ Cuán más te mantuviste en casa?",
afp2.bool = "¿ La medida \"Retiro del 25% de fondos AFP para trabajadores afiliados\", te mantuvo más tiempo en casa?",
afp2.05 = "Respecto a la anterior pregunta. Del 0 al 5, ¿Cuánto tiempo más te mantuvo en casa?",
decceleration = "¿Qué condiciones crees que existen en tu distrito que retardan la propagación del Covid?",
acceleration = "¿Qué condiciones crees que existen en tu distrito que aceleran la propagación del Covid?"
) %>%
mutate(
genero = as.factor(genero),
ingreso = as.factor(ingreso),
distrito = as.factor(distrito),
estudio = factor(estudio, levels = c("Secundaria", "Técnica", "Universitaria", "Posgrado")),
empleo = factor(empleo, levels = c("No trabajo", "Informal", "Formal")),
# Esteban Nicolas Villacorta Garcia cambió las respuestas de la encuesta
# de "Mayor 5" a 6.
salidas = replace(salidas, salidas=="6", "Mayor 5"),
salidas = factor(salidas, levels = c(0:5, "Mayor 5")),
razones = strsplit(razones, ", "),
social.bool = social.bool == "Sí" | social.bool == "Si",
ocio.bool = ocio.bool == "Sí" | ocio.bool == "Si",
noday.bool = noday.bool == "Sí" | noday.bool == "Si",
multa.bool = multa.bool == "Sí" | multa.bool == "Si",
bono.bool = bono.bool == "Sí" | bono.bool == "Si",
afp1.bool = afp1.bool == "Sí" | afp1.bool == "Si",
afp2.bool = afp2.bool == "Sí" | afp2.bool == "Si",
acceleration = strsplit(acceleration, ", "),
decceleration = strsplit(decceleration, ", ")
) -> df_form2
Parsed with column specification:
cols(
.default = col_character(),
`¿Cuál es tu edad?` = col_double(),
`¿Cuántas veces a la semana, en promedio, salías de casa durante los días de cuarentena?` = col_double(),
`Respecto a la anterior pregunta. Del 0 al 5, ¿ En cuánto disminuyó tus salidas durante la cuarentena?` = col_double(),
`Respecto a la anterior pregunta. Del 0 al 5, ¿Cuánto te desanimó salir de casa?` = col_double(),
`Respecto a la anterior pregunta. Del 0 al 5, ¿Cuánto cambio tus salidas?` = col_double(),
`Respecto a la anterior pregunta. Del 0 al 5, ¿Cuán menores fueron tus salidas?` = col_double(),
`Respecto a la anterior pregunta. Del 0 al 5, ¿Cuánto se redujo tus salidas?` = col_double(),
`Respecto a la anterior pregunta. Del 0 al 5, ¿ Cuán más te mantuviste en casa?` = col_double(),
`Respecto a la anterior pregunta. Del 0 al 5, ¿Cuánto tiempo más te mantuvo en casa?` = col_double()
)
See spec(...) for full column specifications.
Edad de la muestra
summary(df_form2$edad)
Min. 1st Qu. Median Mean 3rd Qu. Max.
17.0 22.0 28.0 33.4 45.0 67.0
boxplot(df_form2$edad, xlab = "", ylab = "Edad", main=NULL)
title("Gráfico 1. Edad")

Min. 1st Qu. Median Mean 3rd Qu. Max. 17.00 23.00 32.00 34.57 46.00 60.00
n = 310, sd = 12.619
Podemos así determinar el intervalo de confianza calculando:
desv/sqrt(n) = 12.619 /sqrt(310) =0.7167 z t alfa/2 = 1.96
U.Bound => 34.57 + 1.96 * 12.619 = 59.30 L.Bound => 34.57 - 1.96 * 12.619 = 9.84
Se sabe por tanto que la media real se puede encontrar en [9.84, 59.30] con 95% de certeza.
Género
df_form2 %>%
group_by(genero) %>%
summarise(n = n()) %>%
barplot(n~genero, data=., xlab="Personas", ylab="Cantidad")
title("Gráfico 2. Género")

Ingreso promedio
par(mai = c(0.8, 1.5, 0.2, 0.5))
df_form2 %>%
group_by(ingreso) %>%
summarise(n = n()) %>%
barplot(n~ingreso, data=., horiz = TRUE, las = 2, xlab = "Personas", ylab="")
title(ylab="Ingreso", line=6)
title("Gráfico 3. Ingresos")

Distrito
par(mai = c(1, 2, 0.5, 0.5))
#plot(edad~distrito, data = df_form2, horizontal=TRUE, las=2, xlab="")
#title(ylab="Distrito", line=8)
df_form2$distrito %>%
table() %>%
sort(TRUE) %>%
barplot(horiz = TRUE, las = 2, xlab = "Personas", ylab="")
title("Gráfico 4. Distrito")

Empleo
par(mai = c(1, 1.5, 0.5, 0.5))
df_form2$empleo %>%
table() %>%
sort(TRUE) %>%
barplot(horiz = TRUE, las = 2, xlab = "Personas", ylab="")
title("Gráfico 5. Tipo de trabajo")

¿Qué tanto varían las cifras de nuevos infectados durante los periodos de instauración previos-posteriores a la medida?
Para esta primera pregunta se han procesado los datos web. Se presentarán dos gráficos por cada una de las cuatro medidas que se analizarán. El primero de ellos será de los nuevos casos y el segundo de la movilización recreacional (cambios en la movilización). Los descriptores que se están utilizando para describir mejor los datos obtenidos es la media y mediana. Es necesario destacar que se ha optado por graficar los datos diez días antes de que se decrete la medida y diez días después de haberse promulgado. ## Declaración del Estado de Emergencia # Incorporar el n° de Gráfico 6. declaración nuevos casos
Nuevos casos 03-05 -> 03-25
plot_new_cases("2020-03-05", "2020-03-25")

.
En esta gráfica podemos visualizar que la cantidad de infectados por día bajó en algunos días inmediatamente después de que se declarará el estado de emergencia. Se puede apreciar en la gráfica que se lleva a cabo cada 2 o 3 días durante la semana siguiente a la implementación del Estado de Emergencia. Esto se podría deber a factores como la cantidad de pruebas tomadas por día, frecuencia de salida de las personas y el cumplimiento de las leyes y medidas tomadas.
Para analizar esta gráfica, se asume que el crecimiento de la enfermedad bajo condiciones normales es exponencial. Por tanto, se puede construir un modelo tal que: ln(y) At+B. Tomando a L1como regresión de control sin variable independiente y L2la regresión luego de aplicarse la medida, se realizó un F-test para comprobar si el modelo L1modela a L2 sin diferencias significativas.
-Ho : No existen diferencias significativas entre ambos modelos -Ha : Existen diferencias significativas entre el modelo anterior a la medida y el actual.
IMAGEN
Dado que la varianza 1 > varianza 2, la elección del orden de las variables es correcta. Por tanto, dado F > F crítico, se encuentra evidencia para falsear Ho. Dado > P(F<=f) una cola, se rechaza la hipótesis nula, por lo que existen diferencias significativas. Comparando las pendientes A1=0.337 y A2=0.0729 con A2 <A1, se puede asumir que se frenó la expansión de la enfermedad.
#ncorporar el n° de Gráfico 7. título misma medida pero la de cambio
PLOT
Movilización recreacional 03-05 -> 03-25
plot_rmoves("2020-03-05", "2020-03-25")

.
A partir del gráfico 7, se logra visualizar que previo a la promulgación de la medida “Declaración de Estado de Emergencia”, la gente tenía mucha más movilización y luego de decretada, el cambio de movilización disminuyó en gran medida. El promedio y mediana (líneas continuas) antes de que se aplique esta medida es aproximadamente -3. Por otro lado, el promedio y mediana (líneas punteadas) desde el quince hasta el veinticinco está por debajo de -60.
Para comprobar la significancia de esta diferencia, se realizó un test-t de medias. Se asumieron las siguientes hipótesis:
-Ho : No existe un efecto significativo de la medida por sobre las medias del Cambio de Movilización -Ha : Existen diferencias significativas entre las medias de la variable Cambio de Movilización para antes y después de ejecutarse la medida.
[imagen]
Dado que el valor |t| > t-crítico dos colas, se puede encontrar evidencia para rechazar la hipótesis nula Ho. Dado =0.05 > P(T<=t) dos colas, existe significancia suficiente para ello. Por tanto, se rechaza Ho, existiendo por tanto diferencias significativas entre antes de ejecutarse la declaración de Estado de Emergencia y después sobre la movilización de las personas. Debido a que el coeficiente de correlación es menor a 0, se puede afirmar que el cambio además redujo la movilización. ## Aprobación del Padrón de Hogares
Este gráfico nos muestra la cantidad de casos diez días antes y diez días después de que la medida “Aprobación del Padrón de Hogares” fuera aprobada. Esta es una gráfica muy importante, dado que tenía como objetivo ayudar a las poblaciones más vulnerables en condición de extrema pobreza a nivel nacional para que pudieran subsistir durante la cuarentena. Dicho en otras palabras, para que pudieran acceder a los servicios básicos y medicamentos, en caso fuesen requeridos. La cantidad de casos antes de que la medida fuese declarada, 08/03 hasta 18/03, va desde aproximadamente uno hasta veinte. No obstante, desde 18/03 hasta 28/03 la cantidad de casos va en aumento. Sin duda alguna, el objetivo era bueno, pero para el panorama que se estaba viviendo no fue efectiva. Una posible hipótesis sería la salida obligatoria de los beneficiarios a los bancos a formar largas colas durante horas. Esto explicaría el aumento de casos.
Nuevos casos 03-08 -> 03-28
plot_new_cases("2020-03-08", "2020-03-28")

.
#grafico 8 nuevos casos
Se realizó un f-test sobre los inputs a la regresión lineal del logaritmo de la gráfica, siguiendo el modelo planteado arriba. Se colocó como control a todos los datos previos a declararse la medida. Se plantearon las siguientes hipótesis: Ho : No existe un efecto significativo de la medida por sobre la tendencia de los nuevos casos con respecto al control. Ha : Existen un efecto significativo entre las muestras de control y la data posterior a la declaración.
IMAGEN
Dado que la primera varianza es mayor a la segunda, el orden de operación de los datos es correcto. Como tal, dado F > F-critico una cola, encontramos evidencia en contra de Ho. Dado ademas P(F<=f) < , se puede garantizar la decisión de rechazar la hipótesis nula, por lo que deben existir diferencias significativas entre los datos. Dado además A1= 0.2672 > A2=0.0116, se puede afirmar que la medida redujo la tasa de infección.
#GRAFICO 9 CAMBIOS
Esta gráfica, al igual que la Gráfica 7, manifiesta un comportamiento similar. Sin embargo, a partir de la disminución de la curva se podrían generar algunas conjeturas. La primera de ellas es que las personas tenían un respaldo para poder comprar sus alimentos y medicamentos de ser necesario por lo que ya no tenían que salir a las calles de manera concurrida a vender productos, entre otras cosas. Cabe resaltar que con esto no queremos decir que la población no salía y que la medida fue 100% efectiva. Al contrario, la población objetivo salió para hacer el retiro del subsidio por lo que el número de casos aumentó. Sin embargo, esto también contribuyó a que en días posteriores se queden en casa, debido a que contaban con dinero para subsistir por un par de semanas más (varía según el número de integrantes). Estas afirmaciones se respaldan con la media y mediana antes del decreto (líneas continuas), dado que se ubica en la parte superior del gráfico, mientras que la media y mediana (líneas punteadas) por debajo de -60.
#GRAFICO DE CAMBIOS RECREACIONALES Y ESO
Movilización recreacional 03-08 -> 03-28
plot_rmoves("2020-03-08", "2020-03-28")

.
Utilizando un test-t para medias en ambas secciones de la gráfica, podemos determinar si existe un efecto de la medida por sobre la trend general. Ho : No existen diferencias significativas entre ambas secciones de la gráfica. Ha : Existen diferencias significativas entre ambas secciones de la gráfica.
IMAGEN
Dado que el estadístico |t| > t-crítico dos colas, se encuentra evidencia para falsear la hipótesis nula. Dado que P(T<=t) < , la elección es justificable, por lo que se rechaza la hipótesis nula, concluyendo por tanto que existe una diferencia significativa entre ambas secciones de la gráfica. Debido a que la correlación es negativa, se concluye que la medida redujo
Salida alternada por género
El gráfico 10 exhibe la cantidad de casos antes y después de aplicarse la medida “Salida alternada por género”. En un primer momento esta medida tenía como objetivo disminuir el número de contagios. Por tal razón, el Gobierno decretó determinados días de salida para mujeres y otros para varones, y los domingos nadie salía. No obstante, a partir de la representación se puede observar que el número de casos aumentó de aproximadamente cien a mil cien casos. Después de los reportajes vistos, podríamos tratar de explicar este comportamiento basándonos en lo siguiente: las mamás consideran que los varones (esposos) no saben hacer las compras de mercado. Algunos dirían que esto no tiene fundamento, pero analizando detalladamente los reportajes, pudimos reconocer que en los días de salida de mujeres había mucha más aglomeración y desorden, a diferencia de los días en que les tocaba salir a los varones.
Nuevos casos 03-24 -> 04-13
plot_new_cases("2020-03-24", "2020-04-13")

.
#GRAFICO 10 NUEVOS CASOS
Para comprobar estadísticamente si es que la medida fue efectiva o no, se realizó el test F sobre la forma logarítmica de la regresión. Debido a que la regresión no se centra en 0, se normalizaron los puntos previamente.
Ho : No existe diferencias significativas entre los dos sets de puntos. Ha : Existe diferencias significativas entre el set de puntos antes y despues de aplicarse la medida.
IMAGEN
Dado que F < F-crítico una cola, no se puede falsear la hipótesis nula. Además, comoP(F<=f) una cola > 0.05, se decide mantener la hipótesis nula, considerando que no existen diferencias significativas. Con esto, se comprueba que la medida no tuvo éxito en reducir los nuevos casos.
#GRAFICO DE CAMBIOS
Movilización recreacional 03-24 -> 04-13
plot_rmoves("2020-03-24", "2020-04-13")

.
Se puede observar un leve cambio en la posición de las medias de ambos datasets. Para comprobar la significancia de esta diferencia, se plantea un test-t. Asumiendo:
Ho: No se puede encontrar diferencias significativas entre las dos fases.
Ha: Existen diferencias significativas entre antes de declararse la medida y tras su ejecución.
IMAGEN
Dado que |tStat| < t critico dos colas, no se puede encontrar evidencia que niegue Ho. Dado además que P(T<=t) > , no se llega a rechazar la hipótesis nula, por lo que se asume que no existen diferencias significativas tras la medida.
##Permiso de adquisición de bienes y servicios básicos
#grafico de nuevos casos
En el gráfico número 12 hay una observación muy poco evidente que se puede ver. Pocos días anteriores a la implementación de la medida en consideración, los nuevos casos empezaron a incrementar después de haberse mantenido relativamente constantes por un tiempo. El incremento de estos nuevos casos al parecer fue controlado por unos dias posteriores de ser tomada la medida. Sin embargo, en la gráfica se puede visualizar que aproximadamente una semana después de haberse tomado esta medida los casos empezaron a incrementar nuevamente.
Nuevos casos 04-10 -> 04-30
plot_new_cases("2020-04-10", "2020-04-30")

.
Para comprobar la significancia de esta diferencia, se plantea un test-f. Asumiendo a los puntos ubicados antes de la aplicación de la medida como control:
Ho: No se puede encontrar diferencias significativas entre la fase de control y tras aplicar la medida.
Ha: Existen diferencias significativas entre antes de declararse la medida y tras su ejecución.
IMAGEN
Dado F < F-crítico una cola, no se encuentra evidencia en contra de la hipótesis nula. Como P(F<=f)>0.05, no se rechaza Ho, asumiendo por tanto que no existen diferencias significativas en el ratio de aparición de nuevos casos.
#aqui va el grafico de cambios
Movilización recreacional 04-10 -> 04-30
plot_rmoves("2020-04-10", "2020-04-30")

.
En esta gráfica podemos ver que la medida de permiso de adquisición de bienes y servicios básicos no afectó de manera evidente la movilización social, ya que no se puede ver una reducción o incremento totalmente claro en los días posteriores a la implementación de esta medida. Se puede observar esto mediante un t-test. Asumiendo así:
Ho = No existe diferencia antes y después de aplicarse la medida
Ha = Existen diferencias significativas en la movilización entre el periodo previo a la declaración y el posterior.
IMAGEN
Dado que |t| < t-crítico, no se puede solventar la idea de rechazar la hipótesis directamente. Dado además que P(T<t) > , no se llega a rechazar completamente Ho, por lo que se asume que no existen diferencias significativas.
Frecuencia de salida
df_form2 %>%
group_by(salidas) %>%
summarise(n=n()) %>%
barplot(n~salidas, data=., ylab = "Personas", xlab="Salidas")
title("Salidas por semana")

Casos por distrito
par(mai = c(1, 2.5, 1, 0.5))
df %>% filter(PROVINCIA == "LIMA") %>%
select(DISTRITO) %>%
table() %>%
sort(TRUE) %>%
barplot(las=1, horiz=TRUE, xlab="Casos")
title("Casos por distrito")

Razones
df_form2$razones %>% unlist() %>% table() -> razones_t
wordcloud(names(razones_t), as.vector(razones_t), min.freq = 2)
title("Razones para salir durante la cuarentena")

Medidas
par(mai = c(1, 2.5, 0.5, 0.5))
(table(c(
rep("Inmovilización", length(which(df_form2$social.bool))),
rep("No acceso a lugares públicos", length(which(df_form2$ocio.bool))),
rep("Salida intercalada", length(which(df_form2$noday.bool))),
rep("Bono", length(which(df_form2$bono.bool))),
rep("Un monto del Afp", length(which(df_form2$afp1.bool))),
rep("Un porcentaje del Afp", length(which(df_form2$afp2.bool)))
))/length(df_form2$social.bool)) %>%
sort(TRUE) %>%
barplot(horiz = TRUE,
las = 1,
ylab = "",
xlab = "Aprobación"
)
title("Aprobación por medida (de 0 a 1)")

Inmovilización
df_form2$social.05 %>%
table() %>%
barplot(ylab="Personas")
title("De 0 a 5, ¿Cúanto disminuyeron tus salidas durante la cuarentena?")

Suspensión de acceso a lugares públicos
df_form2$ocio.05 %>%
table() %>%
barplot(ylab="Personas")
title("De 0 a 5, ¿Cúanto disminuyeron tus salidas durante la cuarentena?")

Disposición salida de hombres y mujeres en días complementarios
df_form2$noday.05 %>%
table() %>%
barplot(ylab="Personas")
title("Del 0 al 5, ¿Cuánto cambió tus salidas?")

Multa de S/.86-S/.340 para todas las personas que desobedecen disposiciones del gobierno
df_form2$multa.05 %>%
table() %>%
barplot(ylab="Personas")
title("De 0 a 5, ¿Cúanto disminuyeron tus salidas durante la cuarentena?")

Entrega de bono S/. 380, S/.760 de acuerdo al Sistema de Focalización de Hogares (SISFOH)
df_form2$bono.05 %>%
table() %>%
barplot(ylab="Personas")
title("Del 0 al 5, ¿Cuánto se redujo tus salidas?")

Retiro de hasta S/. 2000 de fondos AFP de trabajadores afiliados que no tienen planilla
df_form2$afp1.05 %>%
table() %>%
barplot(ylab="Personas")
title("Del 0 al 5, ¿ Cuán más te mantuviste en casa?")

Retiro del 25% de fondos AFP para trabajadores afiliados
df_form2$afp2.05 %>%
table() %>%
barplot(ylab="Personas")
title("Del 0 al 5, ¿Cuánto tiempo más te mantuvo en casa?")

Distrito vs ingreso
# No supe como hacerlo con vanilla R
ggplot(aes(y = distrito, x = ingreso), data = df_form2) +
geom_boxplot() +
ggtitle("Distritos vs ingresos") +
theme(plot.title = element_text(hjust = 0.5))

Distrito vs casos
par(mai = c(1, 2, 0.2, 0.5))
df %>% filter(PROVINCIA == "LIMA") %>%
filter(DISTRITO %in% c("MIRAFLORES",
"BARRANCO",
"SAN ISIDRO",
"SANTIAGO DE SURCO",
"SAN BORJA")
) -> infectados_5 # Es necesario luego
infectados_5 %>%
select(DISTRITO) %>%
table() %>%
sort(TRUE) %>%
barplot(las=1, horiz=TRUE, xlab="Casos")
title("Casos en algunos distritos")

Distrito vs ingreso otra vez
df_form2 %>%
filter(distrito %in% c("Miraflores",
"Barranco",
"San Isidro",
"Santiago de Surco",
"San Borja")
) -> df_5
ggplot(aes(y = distrito, x = ingreso), data = df_5) +
geom_boxplot() +
ggtitle("5 distritos vs ingresos") # Aún no ha respondido nadie de Miraflores.

Distrito vs empleo
ggplot(aes(y = distrito, x = empleo), data = df_5) +
geom_boxplot() +
ggtitle("5 distritos vs tipo de empleo")

Desaceleración del contagio
df_form2$decceleration %>%
unlist() %>%
table() %>%
sort(TRUE) %>%
knitr::kable(col.names = c("Medida", "Personas que lo aprueban"))
| Toque de queda |
204 |
| Aplicación de medidas preventivas sanitarias |
198 |
| Inmovilización |
192 |
| Que la mayoría de la movilización es por vehículos particulares por suerte |
15 |
Aceleración del contagio
df_form2$acceleration %>%
unlist() %>%
table() %>%
sort(TRUE) %>%
knitr::kable(col.names = c("Factor", "Personas que lo aprueban"))
| Aglomeración de personas |
176 |
| Falta de educación |
167 |
| Informalidad |
164 |
| No acatar las medidas de prevención sanitaria |
144 |
| Desinformación |
93 |
| Sistema de salud |
89 |
| Fue una gestión adecuada en mi opinión |
17 |
| La alta densidad poblacional preexistente causa que no sirva de tanto el confinamiento ya que de todas maneras una casa en promedio alberga 10+ personas |
15 |
Descriptores numéricos para las variables de mayor importancia:
Data web
- Frecuencia de salida de personas (antes y después): Utilizamos mediana y media.
- Cantidad de infectados por día: Utilizamos media.
- Edad: Utilizamos la mediana para relacionar rangos de edades con las repuestas brindadas por las personas en las encuestas.
Encuestas
Se realizará una encuesta para aproximadamente 100 personas, en el cual se formularán preguntas con las siguientes variables: * Frecuencia de salida promedio al día antes del inicio de cuarentena * Frecuencia de salida promedio al día luego de la medida del gobierno * Cantidad aproximada de personas que observó en lugares públicos (mercado, hospital) luego de aplicadas las medidas del gobierno. Esto se medirá mediante un indicador categórico ordinal. * Cantidad de personas aproximada que observó cumplir con el distanciamiento social de 1 metro, luego de las medidas del gobierno. Esto se medirá mediante un indicador categórico ordinal * Tipo de trabajo (formal / informal) * Edad * Género * Distrito * Clase social * Nivel educativo
LS0tCnRpdGxlOiAiRWZlY3RvIGRlIGxhcyBtZWRpZGFzIHRvbWFkYXMgcG9yIGVsIGdvYmllcm5vIHBlcnVhbm8gZnJlbnRlIGFsIENPVklELTE5IgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRoZW1lOiBkYXJrbHkKICBodG1sX2RvY3VtZW50OgogICAgZGZfcHJpbnQ6IHBhZ2VkCi0tLQoKPHN0eWxlPiBib2R5IHt0ZXh0LWFsaWduOiBqdXN0aWZ5fSA8L3N0eWxlPgoKYGBge3IsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFfQojIE5vIG9sdmlkZXMgaW5zdGFsYXIgbGFzIGRlcGVuZGVuY2lhcwpsaWJyYXJ5KGJlcnJ5RnVuY3Rpb25zKQpsaWJyYXJ5KGN1cmwpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHRtKQpsaWJyYXJ5KHdvcmRjbG91ZCkKCiMjIC0tLS0gY292aWQKdG1wIDwtIHRlbXBmaWxlKCkKY3VybF9kb3dubG9hZCgiaHR0cHM6Ly9jbG91ZC5taW5zYS5nb2IucGUvcy9ZOHczd0hzRWRZUVNaUnAvZG93bmxvYWQiLCB0bXApCgpyZWFkTGluZXModG1wKSAlPiUKICAgIGljb252KGZyb20gPSAiSVNPLTg4NTktMSIsIHRvID0gIlVURi04IikgJT4lCiAgICByZWFkX2NzdigpICU+JQogICAgbXV0YXRlKEZFQ0hBX1JFU1VMVEFETyA9IGx1YnJpZGF0ZTo6ZG15KEZFQ0hBX1JFU1VMVEFETykpIC0+IGRmCgojIyAtLS0tIG1vdmlsaXphdGlvbgp0bXAgPC0gdGVtcGZpbGUoKQpjdXJsX2Rvd25sb2FkKCJodHRwczovL3d3dy5nc3RhdGljLmNvbS9jb3ZpZDE5L21vYmlsaXR5L0dsb2JhbF9Nb2JpbGl0eV9SZXBvcnQuY3N2IiwgdG1wKQpyZWFkX2Nzdih0bXAsIGNvbF90eXBlcyA9ICJjY2NjY2REZGRkZGRkIikgJT4lCiAgICBmaWx0ZXIoY291bnRyeV9yZWdpb25fY29kZSA9PSAiUEUiKSAtPiBkZl9tb3YKCiMjIC0tLS0gaW5mZWMKZGYgJT4lCiAgICBncm91cF9ieShGRUNIQV9SRVNVTFRBRE8pICU+JQogICAgc3VtbWFyaXNlKE4gPSBuKCkpICU+JQogICAgYXJyYW5nZShGRUNIQV9SRVNVTFRBRE8pICU+JQogICAgbXV0YXRlKE5TVU0gPSBjdW1zdW0oTikpIC0+IGRmX2luZmVjCgojIyAtLS0tIHBsb3RfbmV3X2Nhc2VzCnBsb3RfbmV3X2Nhc2VzIDwtIGZ1bmN0aW9uKGRheSwgbWluX2RheSwgbWF4X2RheSwgbWFpbl90aXRsZSkgewogICAgZGZfaW5mZWMgJT4lCiAgICAgICAgZmlsdGVyKEZFQ0hBX1JFU1VMVEFETyA+PSBtaW5fZGF5ICYgRkVDSEFfUkVTVUxUQURPIDw9IG1heF9kYXkpIC0+IGRmX3RtcAoKICAgIGRmX2luZmVjICU+JQogICAgICAgIGZpbHRlcihGRUNIQV9SRVNVTFRBRE8gPj0gbWluX2RheSAmIEZFQ0hBX1JFU1VMVEFETyA8IGRheSkgLT4gZGZfdG1wX2EKCiAgICBkZl9pbmZlYyAlPiUKICAgICAgICBmaWx0ZXIoRkVDSEFfUkVTVUxUQURPID4gZGF5ICYgRkVDSEFfUkVTVUxUQURPIDw9IG1heF9kYXkpIC0+IGRmX3RtcF9iCgogICAgZGZfdG1wICU+JQogICAgICAgIHBsb3QoTn5GRUNIQV9SRVNVTFRBRE8sIGRhdGEgPSAuLCBtYWluID0gbWFpbl90aXRsZSwgeGxhYiA9ICJGZWNoYSIsIHlsYWIgPSAiTnVldm9zIGNhc29zIikKCiAgICBtZWFuMSA8LSBtZWFuKGRmX3RtcF9hJE4pCiAgICBzZWdtZW50cyhhcy5EYXRlKG1pbl9kYXkpLTEsIG1lYW4xLCBhcy5EYXRlKGRheSksIG1lYW4xLCBjb2wgPSAicmVkIikKICAgIAogICAgbWVkaWFuMSA8LSBtZWRpYW4oZGZfdG1wX2EkTikKICAgIHNlZ21lbnRzKGFzLkRhdGUobWluX2RheSktMSwgbWVkaWFuMSwgYXMuRGF0ZShkYXkpLCBtZWRpYW4xLCBjb2wgPSAiYmx1ZSIpCgogICAgbWVhbjIgPC0gbWVhbihkZl90bXBfYiROKQogICAgc2VnbWVudHMoYXMuRGF0ZShkYXkpLCBtZWFuMiwgYXMuRGF0ZShtYXhfZGF5KSsxLCBtZWFuMiwgY29sID0gInJlZCIsIGx0eSA9IDIpCiAgICAKICAgIG1lZGlhbjIgPC0gbWVkaWFuKGRmX3RtcF9iJE4pCiAgICBzZWdtZW50cyhhcy5EYXRlKGRheSksIG1lZGlhbjIsIGFzLkRhdGUobWF4X2RheSkrMSwgbWVkaWFuMiwgY29sID0gImJsdWUiLCBsdHkgPSAyKQoKICAgIGxlZ2VuZCgidG9wcmlnaHQiLCBsZWdlbmQ9YygiUHJvbWVkaW8gYW50ZXMiLCAiTWVkaWFuYSBhbnRlcyIsICJQcm9tZWRpbyBkZXNwdcOpcyIsICJNZWRpYW5hIGRlc3B1w6lzIiksCiAgICAgICBjb2w9YygicmVkIiwgImJsdWUiLCAicmVkIiwgImJsdWUiKSwgbHR5PWMoMSwxLDIsMiksIGNleD0wLjgpCn0KCiMjIC0tLS0gcGxvdF9zdW1fY2FzZXMKcGxvdF9zdW1fY2FzZXMgPC0gZnVuY3Rpb24oZGF5LCBtaW5fZGF5LCBtYXhfZGF5LCBtYWluX3RpdGxlKSB7CiAgICBkZl9pbmZlYyAlPiUKICAgICAgICBmaWx0ZXIoRkVDSEFfUkVTVUxUQURPID49IG1pbl9kYXkgJiBGRUNIQV9SRVNVTFRBRE8gPD0gbWF4X2RheSkgJT4lCiAgICAgICAgcGxvdChOU1VNfkZFQ0hBX1JFU1VMVEFETywgZGF0YSA9IC4sIG1haW4gPSBtYWluX3RpdGxlLCB4bGFiID0gIkZlY2hhIiwgeWxhYiA9ICJDYXNvcyB0b3RhbGVzIikKfQoKIyMgLS0tLSBwbG90X3Jtb3ZlcwpwbG90X3Jtb3ZlcyA8LSBmdW5jdGlvbihkYXksIG1pbl9kYXksIG1heF9kYXksIG1haW5fdGl0bGUpIHsKICAgIGRmX21vdiAlPiUKICAgICAgICBncm91cF9ieShkYXRlKSAlPiUKICAgICAgICBzdW1tYXJpc2UobW92ID0gbWVhbihyZXRhaWxfYW5kX3JlY3JlYXRpb25fcGVyY2VudF9jaGFuZ2VfZnJvbV9iYXNlbGluZSwgbmEucm0gPSBUUlVFKSkgLT4gZGZfdG1wCgogICAgZGZfdG1wICU+JSBmaWx0ZXIoZGF0ZSA+PSBtaW5fZGF5ICYgZGF0ZSA8IGRheSkgLT4gZGZfdG1wX2EKICAgIGRmX3RtcCAlPiUgZmlsdGVyKGRhdGUgPiBkYXkgJiBkYXRlIDw9IG1heF9kYXkpIC0+IGRmX3RtcF9iCiAgICBkZl90bXAgJT4lIGZpbHRlcihkYXRlID49IG1pbl9kYXkgJiBkYXRlIDw9IG1heF9kYXkpIC0+IGRmX3RtcAoKICAgIGRmX3RtcCAlPiUKICAgICAgICBwbG90KG1haW4gPSBtYWluX3RpdGxlLCB4bGFiID0gIkZlY2hhIiwgeWxhYiA9ICJDYW1iaW8gZGUgbW92aWxpemFjaW9uIikKCiAgICBtZWFuMSA8LSBtZWFuKGRmX3RtcF9hJG1vdikKICAgIHNlZ21lbnRzKGFzLkRhdGUobWluX2RheSktMSwgbWVhbjEsIGFzLkRhdGUoZGF5KSwgbWVhbjEsIGNvbCA9ICJyZWQiKQogICAgCiAgICBtZWRpYW4xIDwtIG1lZGlhbihkZl90bXBfYSRtb3YpCiAgICBzZWdtZW50cyhhcy5EYXRlKG1pbl9kYXkpLTEsIG1lZGlhbjEsIGFzLkRhdGUoZGF5KSwgbWVkaWFuMSwgY29sID0gImJsdWUiKQoKICAgIG1lYW4yIDwtIG1lYW4oZGZfdG1wX2IkbW92KQogICAgc2VnbWVudHMoYXMuRGF0ZShkYXkpLCBtZWFuMiwgYXMuRGF0ZShtYXhfZGF5KSsxLCBtZWFuMiwgY29sID0gInJlZCIsIGx0eSA9IDIpCiAgICAKICAgIG1lZGlhbjIgPC0gbWVkaWFuKGRmX3RtcF9iJG1vdikKICAgIHNlZ21lbnRzKGFzLkRhdGUoZGF5KSwgbWVkaWFuMiwgYXMuRGF0ZShtYXhfZGF5KSsxLCBtZWRpYW4yLCBjb2wgPSAiYmx1ZSIsIGx0eSA9IDIpCgogICAgbGVnZW5kKCJ0b3ByaWdodCIsIGxlZ2VuZD1jKCJQcm9tZWRpbyBhbnRlcyIsICJNZWRpYW5hIGFudGVzIiwgIlByb21lZGlvIGRlc3B1w6lzIiwgIk1lZGlhbmEgZGVzcHXDqXMiKSwKICAgICAgIGNvbD1jKCJyZWQiLCAiYmx1ZSIsICJyZWQiLCAiYmx1ZSIpLCBsdHk9YygxLDEsMiwyKSwgY2V4PTAuOCkKfQoKIyMgLS0tLSBjYXRfZnVuY3Rpb24KY2F0X2Z1bmN0aW9uIDwtIGZ1bmN0aW9uKGZfbmFtZSwgbWluX2RheSwgbWF4X2RheSkgewogICAgY2F0KCJgYGB7cn1cbiIpCiAgICBjYXQoZl9uYW1lKQogICAgY2F0KCIoXCIiKQogICAgY2F0KGZvcm1hdChhcy5EYXRlKG1pbl9kYXkpLCAiJVktJW0tJWQiKSkKICAgIGNhdCgiXCIsIFwiIikKICAgIGNhdChmb3JtYXQoYXMuRGF0ZShtYXhfZGF5KSwgIiVZLSVtLSVkIikpCiAgICBjYXQoIlwiKVxuYGBgXG5cbiIpCn0KCiMjIC0tLS0gY2F0X3RpdGxlCmNhdF90aXRsZSA8LSBmdW5jdGlvbihmX3RpdGxlLCBtaW5fZGF5LCBtYXhfZGF5KSB7CiAgICBjYXQoIiMjIiwKICAgICAgICBmX3RpdGxlLAogICAgICAgIGZvcm1hdChhcy5EYXRlKG1pbl9kYXkpLCAiJW0tJWQiKSwKICAgICAgICAiLT4iLAogICAgICAgIGZvcm1hdChhcy5EYXRlKG1heF9kYXkpLCAiJW0tJWQiKSwKICAgICAgICAiXG4iCiAgICApCn0KCiMjIC0tLS0gY2F0X3Bsb3QKY2F0X3Bsb3QgPC0gZnVuY3Rpb24oZGF5LCByYW5nZSwgIG1haW5fdGl0bGUsIGZ1biwgdGl0bGUpIHsKICAgIG1pbl9kYXkgPC0gZGF5IC0gcmFuZ2UKICAgIG1heF9kYXkgPC0gZGF5ICsgcmFuZ2UKCiAgICBjYXRfdGl0bGUodGl0bGUsIG1pbl9kYXksIG1heF9kYXkpCiAgICBjYXRfZnVuY3Rpb24oYmVycnlGdW5jdGlvbnM6OmdldE5hbWUoZnVuKSwgbWluX2RheSwgbWF4X2RheSkKCiAgICAjIFByaW50IGRhdGUgaW4gdGl0bGUKICAgIGRhdGVfc3RyIDwtIHBhc3RlKCIoIixmb3JtYXQoYXMuRGF0ZShkYXkpLCAiJVktJW0tJWQiKSAsIikiLCBzZXA9IiIpCiAgICBmdW4oZGF5LCBtaW5fZGF5LCBtYXhfZGF5LCBwYXN0ZShtYWluX3RpdGxlLCBkYXRlX3N0cikpCiAgICBhYmxpbmUodiA9IGFzLkRhdGUoZGF5KSkKCiAgICBjYXQoIlxuLlxuXG5cbiIpCn0KCiMjIC0tLS0gcmVwZWF0X3Bsb3RzCnJlcGVhdF9wbG90cyA8LSBmdW5jdGlvbihkYXksIHJhbmdlLCBtYWluX3RpdGxlID0gIiIpIHsKICAgIGRheSA8LSBsdWJyaWRhdGU6OnltZChkYXkpCiAgICBjYXRfcGxvdChkYXksIHJhbmdlLCBtYWluX3RpdGxlLCBwbG90X25ld19jYXNlcywgIk51ZXZvcyBjYXNvcyIpCiAgICBjYXRfcGxvdChkYXksIHJhbmdlLCBtYWluX3RpdGxlLCBwbG90X3Jtb3ZlcywgIk1vdmlsaXphY2nDs24gcmVjcmVhY2lvbmFsIikKfQpgYGAKClshW1IgQ0ldKGh0dHBzOi8vZ2l0aHViLmNvbS8yMDIwLTAxLWVzdC0xOS9wcm95ZWN0by93b3JrZmxvd3MvUiUyMENJL2JhZGdlLnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS8yMDIwLTAxLWVzdC0xOS9wcm95ZWN0by9hY3Rpb25zP3F1ZXJ5PXdvcmtmbG93JTNBJTIyUitDSSUyMikKWyFbUHB0XShodHRwczovL2ltZy5zaGllbGRzLmlvL2JhZGdlL0lvc2xpZGVzLVBwdC1pbmZvcm1hdGlvbmFsP2xvZ289UildKC4vcHJlcy5odG1sKQpbIVtHaXRIdWIgZm9ya3NdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2ZvcmtzLzIwMjAtMDEtZXN0LTE5L3Byb3llY3RvLnN2Zz9zdHlsZT1zb2NpYWwmbGFiZWw9Rm9yayZtYXhBZ2U9MjU5MjAwMCldKGh0dHBzOi8vZ2l0aHViLmNvbS8yMDIwLTAxLWVzdC0xOS9wcm95ZWN0bykKCiMgUHJvZmVzb3I6CiogSm9zZSBNaWd1ZWwgUmVub20KCiMgQ3Vyc286CiogRXN0YWTDrXN0aWNhIHkgUHJvYmFiaWxpZGFkZXMKCiMgSW50ZWdyYW50ZXMKKiBHw6luZXNpcyBGbG9yZXMgQXJyb3lvCiogQW5nZWwgU2FsdmFkb3IgQ2FsbGVqYSBDYXN0aWxsbwoqIEVzdGViYW4gVmlsbGFjb3J0YSBHYXJjaWEKKiBBbGJlcnRvIE9wb3J0byBBbWVzCiogUmljYXJkbyBBdHN1aGlrbyBZYW1hbW90byBZYW1hbW90bwoKIyBMw61kZXIKKiBHw6luZXNpcyBGbG9yZXMgQXJyb3lvCgojIEludHJvZHVjY2nDs24KRWwgQ09WSUQtMTkgaGEgdGVuaWRvIHVuIGdyYW4gaW1wYWN0byBhbHJlZGVkb3IgZGVsIG11bmRvIHkgaG95IGVuIGRpYSBlcyBmw6FjaWxtZW50ZQplbCB0ZW1hIGRlbCBxdWUgbcOhcyBzZSBoYWJsYS4KVG9kb3MgbG9zIHBhw61zZXMgaGFuIHRvbWFkbyBtZWRpZGFzIGNvbiByZXNwZWN0byBhIGVzdGEgcGFuZGVtaWEsCnNpbiBlbWJhcmdvIHVub3MgbGFzIGhhbiB0b21hZG8gbXV5IHRhcmRlIHkgZXN0byBzZSBoYSB2aXN0byBhZmVjdGFkbyBlbiBsYSBleHBhbnNpw7NuCmRlbCB2aXJ1cyBlbiBlbGxvcy4KRW4gUGVyw7osIGxhcyBtZWRpZGFzIHNlIGVtcGV6YXJvbiBhIHRvbWFyIHLDoXBpZGFtZW50ZSwKcGVybyB1bmEgY2FudGlkYWQgY29uc2lkZXJhYmxlIGRlIGxhIHBvYmxhY2nDs24gbm8gaGEgY3VtcGxpZG8gY29uIGxhcyBpbm1vdmlsaXphY2lvbmVzCnNvY2lhbGVzIHkgZXN0byBzZSBoYSB2aXN0byByZWZsZWphZG8gZW4gbGEgZXhwYW5zacOzbiBkZWwgdmlydXMgZW4gZWwgcGHDrXMuCsK/Q8OzbW8gcG9kZW1vcyBzYWJlciBjdcOhbGVzIGhhbiBzaWRvIGxhcyBtZWRpZGFzIG3DoXMgcmVzcGV0YWRhcyB5IHBvciBxdcOpPwpMYSByZXNwdWVzdGEgYSBlc3RhIHByZWd1bnRhIGxlIHNlcsOtYSBkZSBtdWNoYSBheXVkYSBhbCBnb2JpZXJubyBwZXJ1YW5vLAp5YSBxdWUgY29uIGVzdGEgaW5mb3JtYWNpw7NuIHNlIHBvZHLDrWEgc2FiZXIgcXVlIHRpcG8gZGUgbWVkaWRhcyBkZWJlcsOtYSB0b21hciB5IGVuIHF1w6kKbW9tZW50b3MgcGFyYSBxdWUgc2UgY3VtcGxhbiBkZSBtYW5lcmEgc2F0aXNmYWN0b3JpYS4KRXMgcG9yIGVsbG8gcXVlIG51ZXN0cm8gZ3J1cG8gaGEgZGVjaWRpZG8gaW52ZXN0aWdhciBhY2VyY2EgZGUgbGEgZWZlY3RpdmlkYWQgZGUgbGFzCm1lZGlkYXMgdG9tYWRhcyB5IHN1IHJlbGFjacOzbiBjb24gbGEgbW92aWxpemFjacOzbiBzb2NpYWwgZGUgbG9zIGNpdWRhZGFub3MuCgojIEZhY3RpYmlsaWRhZApFc3RlIHRyYWJham8gZXMgZmFjdGlibGUsIGRlYmlkbyBhIHF1ZSBsYSBtYXlvciBwYXJ0ZSBkZSBsYSBpbmZvcm1hY2nDs24gbGEgcG9kZW1vcwpjb25zZWd1aXIgZGUgZ3LDoWZpY29zIHlhIGV4aXN0ZW50ZXMgY29uIHJlbGFjacOzbiBhbCBDT1ZJRC0xOSBlbiBQZXLDuiB5IGxhIGluZm9ybWFjacOzbgpmYWx0YW50ZSBsYSBwb2RlbW9zIGFkcXVpcmlyIGEgdHJhdsOpcyBkZSBlbmN1ZXN0YXMuCkFkZW3DoXMsIGxvcyBlZmVjdG9zIGRlIGxhcyBtZWRpZGFzIHRvbWFkYXMgcG9yIGVsIGdvYmllcm5vIGVuIGxhIG1vdmlsaXphY2nDs24gc29jaWFsIHlhCnNlIHB1ZWRlbiBhbmFsaXphciwgZGViaWRvIGEgcXVlIHN1IGluZm9ybWFjacOzbiBzZSBvYnRpZW5lIHNvbGFtZW50ZSBkw61hcyBkZXNwdcOpcyBkZQppbXBsZW1lbnRhcmxhcy4KRmluYWxtZW50ZSwgZXN0YSBpbnZlc3RpZ2FjacOzbiBzZSBwdWVkZSBsbGV2YXIgYSBjYWJvIGVuIGVsIHRpZW1wbyBkYWRvLApkZWJpZG8gYSBxdWUgbm8gZXMgdW4gdHJhYmFqbyBxdWUgcmVxdWllcmEgdGllbXBvIGRlIGVzcGVyYSBwYXJhIGxsZWdhciBhIGNvbmNyZXRhcnNlLgpFc3RvIHF1aWVyZSBkZWNpciBxdWUgbG8gcG9kZW1vcyBlbXBlemFyIGlubWVkaWF0YW1lbnRlLgoKIyBPYmpldGl2b3MKTGEgaW1wb3J0YW5jaWEgZGUgZXN0ZSBlc3R1ZGlvIGVzdGFkw61zdGljbyByYWRpY2EgZW4gZWwgYW7DoWxpc2lzIGRlIGFsZ3VuYXMgZGUgbGFzCm1lZGlkYXMgcXVlIGVsIGdvYmllcm5vIGhhIGRlY2xhcmFkbyBhbnRlIGxhIGNveXVudHVyYSBkZWwgQ292aWQtMTkuCkVzIGltcG9ydGFudGUgZXN0dWRpYXIgc3UgZWZlY3RvIGVuIGxhIG1vdmlsaXphY2nDs24gc29jaWFsLApwdWVzdG8gcXVlIHBvZHLDrWEgb3RvcmdhciB1biBwYW5vcmFtYSBtw6FzIGhvbMOtc3RpY28geSB2ZXLDrWRpY28gc29icmUgbGFzIG1lZGlkYXMgcXVlCmdlbmVyYW4gdW4gaW1wYWN0byBwb3NpdGl2byBlbiBsYSBkZXNhY2VsZXJhY2nDs24gZGUgbGEgcHJvcGFnYWNpw7NuIGRlbApudWV2byB2aXJ1cyBTYXJzLUNvVi0yLgoKIyMgT2JqZWN0aXZvcyBnZW5lcmFsZXMKKiBFbCBvYmpldGl2byBkZSBlc3RlIHRyYWJham8gZXMgZGV0ZXJtaW5hciBlbiBxdcOpIG1lZGlkYSBsYXMgZGlmZXJlbnRlcyBhY2Npb25lcwpxdWUgaGEgYXBsaWNhZG8gZWwgZ29iaWVybm8sIGRlc2RlIGVsIGluaWNpbyBkZWwgcGVyaW9kbyBkZSBjdWFyZW50ZW5hIGhhc3RhIGVsCnRpZW1wbyBkZWwgZXN0dWRpbywgIHJlZHVqZXJvbiBlbCBpbXBhY3RvIHkgZXhwYW5zacOzbgpkZWwgQ292aWQtMTkgZW4gZWwgUGVyw7ouClF1ZXJlbW9zIGF2ZXJpZ3VhciBlbCBlZmVjdG8gZGUgZXN0YXMgbWVkaWRhcyBlbiAyIGRpZmVyZW50ZXMgYXNwZWN0b3MuCkVzdG9zIHNvbjogbGEgbW92aWxpemFjacOzbiBzb2NpYWwgeQpkZSBxdcOpIG1hbmVyYSBhZmVjdGFuIGxhIGN1cnZhIGRlIGF1bWVudG8gZGUgaW5mZWN0YWRvcyBwb3IgY29yb25hdmlydXMgZW4gUGVyw7ouCgojIyBPYmpldGl2b3MgZXNwZWPDrWZpY29zCiogRXN0YWJsZWNlciBsYXMgbWVkaWRhcyBhIGVzdHVkaWFyIHkgcXVlIGVzdGFzIHNlIGVuY3VlbnRyZW4gYWxpbmVhZGFzIGEKbGEgaW5tb3ZpbGl6YWNpw7NuIHNvY2lhbC4KKiBBbmFsaXphciBsYSBzaXR1YWNpw7NuIGRlIGxhIGNpdWRhZCBkZSBMaW1hIGVuIGVsIGNhc28gaGlwb3TDqXRpY28gZGUK4oCcRGVjbGFyYWNpw7NuIGRlIGVtZXJnZW5jaWEgZnVlcmEgZGUgdGllbXBv4oCdLgoqIEVzdGFibGVjZXIgbG9zIGZhY3RvcmVzIHF1ZSBkZXRlcm1pbmFuIGxhIHByZXN0YWNpw7NuIGRlIHNlcnZpY2lvcyBww7pibGljb3MgeQpzdSByZWxhY2nDs24gY29uIGxhIHByb3BhZ2FjacOzbiBkZWwgdmlydXMuCiogRXN0YWJsZWNlciB1bmEgcmVsYWNpw7NuIGVudHJlIGVsIGJvbm8gc3Vic2lkaW8geQplbCBkZXNhY2F0byBhIGxhIGlubW92aWxpemFjacOzbiBzb2NpYWwuCiogRXN0YWJsZWNlciBsYXMgcHJpbmNpcGFsZXMgcmF6b25lcyBkZSBsYXMgcGVyc29uYXMgcGFyYQpkZXNvYmVkZWNlciBsYSBpbm1vdmlsaXphY2nDs24gc29jaWFsLgoKIyBNYXJjbyBUZcOzcmljbwoKIyMgUG9ibGFjacOzbiBvYmpldGl2bwpMYSBwb2JsYWNpw7NuIGRlIGludGVyw6lzIHNvbiBsb3MgY2l1ZGFkYW5vcyBwZXJ1YW5vcy4KUGFyYSBsb2dyYXIgcXVlIG51ZXN0cmFzIHVuaWRhZGVzIG11ZXN0cmFsZXMgc2VhbiBsb3MgbcOhcyByZXByZXNlbnRhdGl2YSBwb3NpYmxlLApoZW1vcyBkZWNpZGlkbyBkZWxpbWl0YXIgbnVlc3RyYSBwb2JsYWNpw7NuIG9iamV0aXZvIGFsIMOhcmVhIGRlIExpbWEuCkVzdG8gc2UgZGViZSBhIHF1ZSBudWVzdHJvcyBlbmN1ZXN0YWRvcyBzZSBlbmN1ZW50cmFuIGVuIGVzdGEgem9uYSB5CmxhIG1heW9yIGNhbnRpZGFkIGRlIHBvYmxhY2nDs24gc2UgZW5jdWVudHJhIGFxdcOtLgoKIyMgVW5pZGFkIG11ZXN0cmFsCiogUGFyYSBsYXMgZW5jdWVzdGFzIG51ZXN0cmEgdW5pZGFkIG11ZXN0cmFsIHNvbiBsb3MgYWx1bW5vcyBkZSBsYSBVbml2ZXJzaWRhZCBVVEVDIHkgc3VzIGZhbWlsaWFzIFsxOCAtIDUwIGHDsW9zXQoqIENvbiByZXNwZWN0byBhIGxvcyBkYXRvcyB5IGdyw6FmaWNvcyBicmluZGFkb3MgcG9yIGxhIHdlYiwgbnVlc3RyYSB1bmlkYWQgbXVlc3RyYWwgZXMgbGEgY2l1ZGFkIGRlIExpbWEuCiogQWNjZWRlcmVtb3MgYSBsYXMgb2JzZXJ2YWNpb25lcyB5L28gbWVkaWNpb25lcyBkZSBsYXMgdW5pZGFkZXMgbXVlc3RyYWxlcyBtZWRpYW50ZQpmdWVudGVzIGRlIGludGVybmV0IHF1ZSBwcmVzZW50YW4gZmlhYmlsaWRhZCwgcmVzcGFsZG8gZGVsIGdvYmllcm5vLgpEZWwgbWlzbW8gbW9kbywgc2UgcmVhbGl6YXLDoW4gZW5jdWVzdGFzIGEgbG9zIGFsdW1ub3MgZGUgVVRFQyB5IHN1cyBmYW1pbGlhcmVzCmEgdHJhdsOpcyBkZSBwcmVndW50YXMgcmVsYWNpb25hZGFzIGNvbiBzdSBtb3ZpbGl6YWNpw7NuIHNvY2lhbCBhbnRlcyB5IGR1cmFudGUgbGEKY3VhcmVudGVuYS4KRWxsbyBjb24gZWwgcHJvcMOzc2l0byBkZSBlbmNvbnRyYXIgbGFzIHJhem9uZXMgZGUgbW92aWxpemFjacOzbgoKIyMgTXVlc3RyZW8KVGlwbyBkZSBtdWVzdHJlbwoKRWwgdGlwbyBkZSBtdWVzdHJlbyBlcyBhbGVhdG9yaW8gc2ltcGxlIGVzdHJhdGlmaWNhZG8gcGFyYSBjaXVkYWRhbm9zIGNvbiBlZGFkZXMKZW50cmUgMTgtNTAgYcOxb3MuCkVsbG8sIGRhZG8gcXVlIHRvZG9zIGxvcyBpbmRpdmlkdW9zIGRlIHN1YmNvbmp1bnRvIGRlIGxhIHBvYmxhY2nDs24gb2JqZXRpdm8KdGllbmVuIGxhIG1pc21hIHByb2JhYmlsaWRhZCBkZSBzZXIgc2VsZWNjaW9uYWRvcy4KCiMjIFRhbWHDsW8gZGUgbGEgbXVlc3RyYQoqIFBhcmEgbGEgaW52ZXN0aWdhY2nDs24sIHNlIGJ1c2NhIGN1bXBsaXIgcG9yIGxvIG1lbm9zIGNvbjoKPDAuMDUsIGU8MC4wNQoqUGFyYSBlbmNvbnRyYXIgdW4gbsO6bWVybyBtw61uaW1vIGRlIHBlcnNvbmFzIGEgZW50cmV2aXN0YXIsIG1hbnRlbmllbmRvIHVuYSBjb25maWFuemEgZGUgOTUlIHkgbWFyZ2VuIGRlIGVycm9yIGRlIDUlLCBzZSB1dGlsaXrDsyBsYSBzaWd1aWVudGUgZsOzcm11bGE6CgokJG4gPSBaXjJwKDEtcCkvZV4yJCQKCkNvbW8gbm8gaGF5IHRvZGF2w61hIGRhdG9zIHBhcmEgb2J0ZW5lciBlbCB2YWxvciByZWFsIGRlIHAsIHNlIGFzdW1lIHAgPSAwLjUuIENvbiBlbGxvLCBzZSBvYnRpZW5lIHVuIHRhbWHDsW8gZGUgbXVlc3RyYSBkZSBwb3IgbG8gbWVub3MgOTEgcGVyc29uYXMgcGFyYSBzZXIgc2lnbmlmaWNhdGl2by4gCgojIFByb3ZlbmllbmNpYSBkZSBsb3MgZGF0b3MKRXhpc3RlbiB2YXJpYXMgZnVlbnRlcyBkZSBsYSBxdWUgZXMgcG9zaWJsZSBleHRyYWVyIGxhIGluZm9ybWFjacOzbiBuZWNlc2FyaWEKcGFyYSByZXNwb25kZXIgbGFzIHByZWd1bnRhcy4KCiogQ29tcGVuZGlvIGRlIG5vcm1hcyBlbWl0aWRhcyBwb3IgZWwgRXN0YWRvIFBlcnVhbm8gcGFyYSBhZnJvbnRhciBsYSBwcm9wYWdhY2nDs24KICBkZWwgQ292aWQtMTkuICgxIGRlIGZlYnJlcm8gZGUgMjAyMCBhbCA3IGRlIG1heW8gZGUgMjAyMCkKKiBOb3JtYXRpdmEgc29icmUgRXN0YWRvIGRlIEVtZXJnZW5jaWEgcG9yIENvcm9uYXZpcnVzLgoqIEFjY2lvbmVzIGFkb3B0YWRhcyBwb3IgZWwgZ29iaWVybm8gYW50ZSBDT1ZJRC0xOSAoMjAyMCkKKiBDT1ZJRC0xOSBDb21tdW5pdHkgTW9iaWxpdHkgUmVwb3J0ICgyMDIwKS4KCipOb3RhOiBUb2RhcyBzZSBlbmN1ZW50cmFuIGNpdGFkYXMgZW4gYmlibGlvZ3JhZsOtYS4qCgpMYSBpbmZvcm1hY2nDs24gY29udGVuaWRhIGVuIGVzdGFzIGRpcmVjY2lvbmVzIHNvbiBvcmlnaW5hbGVzLAphZGVtw6FzIGRlIGNvbmZpYWJsZXMsIGRhZG8gcXVlIHNlIHByZXNlbnRhIGNhZGEgbWVkaWRhIGNvbiBzdSByZXNwZWN0aXZvIGRlY3JldG8KbGVnaXNsYXRpdm8uCkFzaW1pc21vLCBsb3MgZGF0b3MgZXN0YWTDrXN0aWNvcyBjdWVudGFuIGNvbiBzdXN0ZW50byBkZSBmdWVudGVzIG9maWNpYWxlcy4KCiMgVXNvIGRlIGRhdG9zCgpDb24gcmVzcGVjdG8gYWwgdXNvIGRlIGxvcyBkYXRvcyBvYnRlbmlkb3MgZGUgZnVlbnRlcywgdGVuZW1vcyBjbGFybyBjw7NtbyB1dGlsaXphciBjYWRhIHVubyBkZSBlbGxvcy4KTGEgZnVlbnRlIGRlIGxhIHF1ZSBhZHF1aXJpbW9zIGxhIGluZm9ybWFjacOzbiByZXNwZWN0byBhIGxhcyBtZWRpZGFzIHRvbWFkYXMgbm9zIGVzIGRlCm11Y2hhIGF5dWRhLCB5YSBxdWUganVudG8gYSBlbGxhcyBlc3TDoW4gbGFzIGZlY2hhcyBlbiBsYXMgcXVlIHNlIGxsZXZhcm9uIGEgY2Fiby4KRXN0byBub3MgcGVybWl0ZSBhbmFsaXphciBsYSBwb2JsYWNpw7NuIGFudGVzIHkgZGVzcHXDqXMgZGUgcXVlIHNlIGltcGxlbWVudGFyw6FuCmVzdGFzIG1lZGlkYXMuCgpMYXMgZnVlbnRlcyBkZSBsYXMgcXVlIGFkcXVpcmltb3MgbGFzIGdyw6FmaWNhcyBkZSBpbm1vdmlsaXphY2nDs24gc29jaWFsIHRhbWJpw6luIG5vcwpzb24gZGUgZ3JhbiBheXVkYSBwb3JxdWUgbm9zIHBlcm1pdGVuIHJlbGFjaW9uYXIgbGFzIGZlY2hhcyBlbiBsYXMgcXVlIHNlIGxsZXZhcm9uCmEgY2FibyBsYXMgbWVkaWRhcyBndWJlcm5hbWVudGFsZXMgY29uIGVsIGZsdWpvIGRlIGdlbnRlIGVuIGxhcyBjYWxsZXMuCkVzdGEgcmVsYWNpw7NuIGVzIG11eSBpbXBvcnRhbnRlLCB5YSBxdWUgbm9zIHBlcm1pdGlyw6EgYW5hbGl6YXIgbGEgZWZlY3RpdmlkYWQgZGUKbG9zIGRlY3JldG9zIHkgbm9zIGF5dWRhcsOhIGEgbG9ncmFyIG51ZXN0cm9zIG9iamV0aXZvcy4KRWwgcHJvY2VzYW1pZW50byBkZSBsYSBkYXRhIG9idGVuaWRhIGVuIGxhcyBmdWVudGVzIGVzIG11eSBpbXBvcnRhbnRlLApkZWJpZG8gYSBxdWUgcG9yIHPDrSBzb2xhcyBub3MgbXVlc3RyYW4gaW5mb3JtYWNpw7NuIOKAnGNydWRh4oCdIHF1ZSB0b2RvIGVsIG11bmRvIHlhIGNvbm9jZS4KQWwgcHJvY2VzYXIgZXN0YSBkYXRhIHkgcmVsYWNpb25hcmxhIGNvbiBvdHJhL3MsIGxhIGludmVzdGlnYWNpw7NuIHNlIHZ1ZWx2ZSBtw6FzCmludGVyZXNhbnRlLCB5YSBxdWUgbGFzIHJlbGFjaW9uZXMgZW50cmUgZGlmZXJlbnRlcyBlc3RhZMOtc3RpY2FzIHNvbgpwb3NpYmxlbWVudGUgZGVzY29ub2NpZGFzIHkgbGUgYnJpbmRhbiBpbmZvcm1hY2nDs24gbXVjaG8gbcOhcyDDunRpbCBhbCBsZWN0b3IuCgojIFBsYW5pZmljYWNpw7NuCgo8aW1nIHNyYz0iZ2FudHQuc3ZnIj4KCiMgTWVkaWRhcyBlbGVnaWRhcwoKMS4gRGVjcmV0byBkZSBlc3RhZG8gZGUgZW1lcmdlbmNpYS4KICAgIC0gwr9DdcOhbCBmdWUgZWwgZWZlY3RvIHF1ZSB0dXZvIGVsIGRlY3JldG8gZGUgZXN0YWRvIGRlIGVtZXJnZW5jaWEgZW4KICAgIGxhIHBvYmxhY2nDs24gZW1vY2lvbmFsbWVudGU/IChFeHBsb3JhdG9yaWEpCgoyLiBEZWNyZXRvIGRlIFVyZ2VuY2lhIHF1ZSBkaWN0YSBtZWRpZGFzIGV4dHJhb3JkaW5hcmlhcyBjb24gbGEgZmluYWxpZGFkIGRlCmFkcXVpcmlyIGJpZW5lcyB5IHNlcnZpY2lvcyBuZWNlc2FyaW9zIHBhcmEgZWwgYWxvamFtaWVudG8gZW4gY3VhcmVudGVuYSB5CmFsaW1lbnRhY2nDs24gZGUgbGFzIHBlcnNvbmFzIHF1ZSBkZWJhbiBkZXNwbGF6YXJzZSBkZW50cm8gZGVsIHBhw61zIGEKY29uc2VjdWVuY2lhIGRlIGxhIGRlY2xhcmFjacOzbiBkZWwgRXN0YWRvIGRlIEVtZXJnZW5jaWEgTmFjaW9uYWwgcG9yIGVsIENPVklELTE5ICgzODApCiAgICAtIMK/TGEgY2FudGlkYWQgZGUgcGVyc29uYXMgcXVlIHNlIHZpZXJvbiBiZW5lZmljaWFkYXMgcG9yIGVzdGUgZGVjcmV0byBmdWUKICAgIHN1ZmljaWVudGUgcGFyYSBxdWUgc2UgcmVkdXpjYSBjb25zaWRlcmFibGVtZW50ZSBlbCB0csOhbnNpdG8gZGUgZ2VudGU/IChJbmZlcmVuY2lhbCkKCjMuIEFwcnVlYmFuIGVsIFBhZHLDs24gZGUgbG9zIGhvZ2FyZXMgZW4gY29uZGljacOzbiBkZSBwb2JyZXphIG8gcG9icmV6YSBleHRyZW1hCmJlbmVmaWNpYXJpb3MgZGVsIHN1YnNpZGlvIG1vbmV0YXJpbyBkZSBhY3VlcmRvIGFsIFNpc3RlbWEgZGUgRm9jYWxpemFjacOzbiBkZQpIb2dhcmVzIChTSVNGT0gpIHF1ZSBzZSBlbmN1ZW50cmVuIGVuIGxvcyDDoW1iaXRvcyBnZW9ncsOhZmljb3MgY29uIG1heW9yCnZ1bG5lcmFiaWxpZGFkIHNhbml0YXJpYSBlbiBlbCBtYXJjbyBkZWwgRC5VLiBOwrAgMDI3LTIwMjAgKDY4KQogICAgLSDCv0xhIHRhc2EgZGUgcGVyc29uYXMgcXVlIHJlY2liZW4gbGEgYm9uaWZpY2FjacOzbiBwb3IgZMOtYSBmdWUgYWxjYW56YWJsZSBhIGxhCiAgICBtYXlvcsOtYSBkZSBwZXJzb25hcyBkZWwgc2VjdG9yIHZ1bG5lcmFibGU/IChEZXNjcmlwdGl2YSkKCjQuIERpc3Bvc2ljacOzbiBwcmVzaWRlbmNpYWwgcXVlIHBlcm1pdGUgbGEgc2FsaWRhIGRlIGhvbWJyZXMgeSBtdWplcmVzIGVuIGTDrWFzCmNvbXBsZW1lbnRhcmlvcyAobHVuZXMtbWnDqXJjb2xlcy12aWVybmVzIC8gbWFydGVzLWp1ZXZlcy1zw6FiYWRvcykKICAgIC0gwr9RdcOpIGRpZmVyZW5jaWEgaHVibyBlbiBlbCB0csOhbnNpdG8gZGUgcGVyc29uYXMgZW50cmUgbG9zIGTDrWFzIHBhcmEgaG9tYnJlcyB5CiAgICBwYXJhIG11amVyZXM/IChEZXNjcmlwdGl2YSkKICAgIC0gwr9BIGTDs25kZSBzZSBkaXJpZ2UgbGEgbWF5b3IgcGFydGUgZGVsIGZsdWpvIGRlIHBlcnNvbmFzPyDCv1F1w6kgcmF6w7NuIGV4cGxpY2Fyw61hIGVzdG8/IChFeHBsb3JhdG9yaWEpCgojIyAgUHJlZ3VudGFzIHByb3B1ZXN0YXMgcGFyYSBlc3R1ZGlvIChwYXJhIGxvcyBlbmN1ZXN0YWRvcykKCnxOwrAgfCBQcmVndW50YSB8IFRpcG8gfAp8LS0tfC0tLS0tLS0tLS18LS0tLS0tfAp8MSAgfMK/UXXDqSBlZGFkIHRpZW5lbiBsb3MgbWllbWJyb3MgZGUgbGEgbXVlc3RyYT98IERlc2NyaXB0aXZhfAp8MiAgfMK/RGUgcXXDqSBnw6luZXJvIHNvbj98IERlc2NyaXB0aXZhfAp8MyAgfMK/Q3XDoW50byBlcyBzdSBpbmdyZXNvIHByb21lZGlvP3wgRGVzY3JpcHRpdmF8Cnw0ICB8wr9FbiBxdcOpIGRpc3RyaXRvIHZpdmVzP3wgRGVzY3JpcHRpdmF8Cnw1ICB8wr9DdcOhbCBmdWUgZWwgw7psdGltbyBuaXZlbCBlZHVjYXRpdm8gcXVlIGNvbXBsZXRhc3RlP3wgRGVzY3JpcHRpdmF8Cnw2ICB8wr9TdSB0aXBvIGRlIGVtcGxlbyBlcyBmb3JtYWwgbyBpbmZvcm1hbD98IERlc2NyaXB0aXZhfAp8NyAgfMK/UXXDqSB0YW4gZnJlY3VlbnRlbWVudGUgc2Fsw61hIGRlIGNhc2EgcHJldmlhbWVudGUgYWwgY29taWVuem8gZGUgbGEgY3VhcmVudGVuYT98IERlc2NyaXB0aXZhfAp8OCAgfMK/UXXDqSB0YW50byBjb25zaWRlcmFzIHF1ZSB0dSBkaXN0cml0byBzZSBoYSB2aXN0byBhZmVjdGFkbyBwb3IgbGEgZW5mZXJtZWRhZD98IERlc2NyaXB0aXZhfAp8OSAgfMK/UG9yIHF1w6kgcmF6b25lcyBzYWzDrWFzIGR1cmFudGUgbGEgY3VhcmVudGVuYT98IERlc2NyaXB0aXZhfAp8MTAgIHzCv0NvbnNpZGVyYXMgcXVlIGVzdGEgbWVkaWRhIOKAnGMvdSBkZSBsYXMgbWVkaWRhc+KAnSBmdWUgZWZlY3RpdmEgcGFyYSByZWR1Y2lyIGVsIG7Dum1lcm8gZGUgY29udGFnaW9zIGVuIHR1IGRpc3RyaXRvP3wgRGVzY3JpcHRpdmF8CnwxMXzCv1F1w6kgY29uZGljaW9uZXMgY3JlZXMgcXVlIGFjZWxlcmFuIGxhIHByb3BhZ2FjacOzbiBkZWwgQ292aWQgZW4gdHUgZGlzdHJpdG8/fCBEZXNjcmlwdGl2YXwKfDEyIHzCv1F1w6kgY29uZGljaW9uZXMgY3JlZXMgcXVlIHJldGFyZGFuIGxhIHByb3BhZ2FjacOzbiBkZWwgQ292aWQgZW4gdHUgZGlzdHJpdG8/fCBEZXNjcmlwdGl2YXwKfDEzIHzCv1F1w6kgbWVkaWRhcyBndWJlcm5hbWVudGFsZXMgc29uIGxhcyBxdWUgcmVjdWVyZGFzIHF1ZSBzZSBoYXlhbiB0b21hZG8/fCBEZXNjcmlwdGl2YXwKCgojIyAgUHJlZ3VudGFzIHByb3B1ZXN0YXMgcGFyYSBlc3R1ZGlvIChwYXJhIGxhIGRhdGEpCgoKfE7CsCB8IFByZWd1bnRhIHwgVGlwbyB8CnwtLS18LS0tLS0tLS0tLXwtLS0tLS18CnwxNCAgfMK/UXXDqSB0YW50byB2YXLDrWFuIGxhcyBjaWZyYXMgZGUgbnVldm9zIGluZmVjdGFkb3MgZHVyYW50ZSBsb3MgcGVyaW9kb3MgZGUgaW5zdGF1cmFjacOzbiBwcmV2aW9zLXBvc3RlcmlvcmVzIGEgbGEgbWVkaWRhP3wgRGVzY3JpcHRpdmF8CnwxNSAgfMK/Q3XDoWxlcyBlcmFuIGxhcyByYXpvbmVzIHBvciBsYXMgcXVlIGxhIHBvYmxhY2nDs24gc2Fsw61hIGR1cmFudGUgbGEgY3VhcmVudGVuYT98IERlc2NyaXB0aXZhfAp8MTYgIHzCv0N1w6FsZXMgaGFuIHNpZG8gbGFzIG1lZGlkYXMgcXVlIGhhbiB0ZW5pZG8gbWF5b3IgaW1wYWN0byBlbiBsYSBwb2JsYWNpw7NuP3wgRGVzY3JpcHRpdmF8CnwxNyAgfEV4aXN0ZSB1bmEgbWlzbWEgdGVuZGVuY2lhIGRlIHBvYmxhY2lvbmVzIGFmZWN0YWRhcyBwb3IgZWwgQ292aWQgMTkgZHVyYW50ZSBsYXMgbWVkaWRhcyBkZSBhaXNsYW1pZW50bz8gfCBFeHBsb3JhdG9yaWF8CnwxOCAgfMK/TGFzIG1lZGlkYXMgZW4gbG9zIGRpc3RyaXRvcyBtw6FzIGV4Y2x1c2l2b3MgcHJlc2VudGFuIHVuYSBtYXlvciBvIG1lbm9yIGVmZWN0aXZpZGFkP3wgRXhwbG9yYXRvcmlhfAp8MTkgIHzCv0xhIGVudHJlZ2EgZGUgbWF5b3JlcyBzdWJzaWRpb3MgbW9uZXRhcmlvcyByZXN1bHRhcsOtYSBlbiB1biBpbXBvcnRhbnRlIGJlbmVmaWNpbyBwYXJhIGxhIGRpc21pbnVjacOzbiBkZWwgbsO6bWVybyBkZSBzYWxpZGFzP3wgSW5mZXJlbmNpYWx8CnwyMCAgfMK/RXMgcG9zaWJsZSBwcmVkZWNpciBjdcOhbnRhcyBob3JhcyBlbiBwcm9tZWRpbyB1bmEgcGVyc29uYSBzYWzDrWEgZGUgY2FzYSBjb25vY2llbmRvIHN1IG5pdmVsIGRlIGluZ3Jlc29zIHkgZWwgZGlzdHJpdG8gZGUgcmVzaWRlbmNpYT98IFByZWRpY3RpdmF8CnwyMSAgfMK/RXMgcG9zaWJsZSBwcmVkZWNpciBzdSBuaXZlbCBkZSBpbmdyZXNvcyBjb25vY2llbmRvIMO6bmljYW1lbnRlIHN1IHRpcG8gZGUgZW1wbGVvP3wgUHJlZGljdGl2YXwKfDIyICB8wr9RdcOpIGZhY3RvcmVzIGRldGVybWluYW4gcXVlIGxhIHByb3BhZ2FjacOzbiBkZWwgQ292aWQgMTkgc2UgZGVzYWNlbGVyZT98IENhdXNhbHwKfDIzICB8wr9Dw7NtbyBjaWVydGFzIGNvbmRpY2lvbmVzIGRldGVybWluYW4gcXVlIGxhIHByb3BhZ2FjacOzbiBkZWwgQ09WSUQgc2UgYWNlbGVyZSAvIHJldGFyZGU/fCBNZWNhbsOtc3RpY2F8CgojIFZhcmlhYmxlcwoKfFZhcmlhYmxlfCBSZWxhY2nDs24gY29uIHByZWd1bnRhfCBUaXBvIGRlIHZhcmlhYmxlfAp8LS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS18CnxFZGFkfCAxfCBDdWFudGl0YXRpdmEgZGlzY3JldGF8CnxHw6luZXJvfCAyfCBDdWFsaXRhdGl2YSBub21pbmFsfAp8Q2xhc2Ugc29jaWFsfCAzLDE3LDE4LDIwLDIxfCBDdWFsaXRhdGl2YSBvcmRpbmFsfAp8Tml2ZWwgZWR1Y2F0aXZvIGFsY2FuemFkb3wgNSwxNywxOHwgQ3VhbGl0YXRpdmEgb3JkaW5hbHwKfFRpcG8gZGUgdHJhYmFqb3wgNiwxOCwyMXwgQ3VhbGl0YXRpdmEgbm9taW5hbHwKfEZyZWN1ZW5jaWEgZGUgc2FsaWRhIHwgNywxOCwxOXwgQ3VhbnRpdGF0aXZhIGRpc2NyZXRhfAp8THVnYXIgZG9uZGUgdml2ZSAoZGlzdHJpdG8pfCA0LDE3LDE4LDIwfCBDdWFsaXRhdGl2YSBub21pbmFsfAp8Q2FudGlkYWQgZGUgaW5mZWN0YWRvcyBwb3IgZGlhfCAxNCwxOXwgQ3VhbnRpdGF0aXZhIGRpc2NyZXRhfAp8SnVzdGlmaWNhY2lvbiBkZSBzYWxpZGF8IDksMTV8IEN1YWxpdGF0aXZhIG5vbWlsYWx8CnxNZWRpZGFzIGFwbGljYWRhc3wgMTAsMTYsMTcsMTgsMTl8IEN1YWxpdGF0aXZhIG5vbWluYWx8CnxGYWN0b3Jlc3wgMjIsMjN8IEN1YWxpdGF0aXZhIG5vbWluYWx8CgojRGVzY3JpcHRvcmVzIG51bcOpcmljb3MgcGFyYSBsYXMgdmFyaWFibGVzIGRlIG1heW9yIGltcG9ydGFuY2lhOgoKIyNWYXJpYWJsZXMgRGF0YSB3ZWIKCi1DYW50aWRhZCAgZGUgIHBlcnNvbmFzIHF1ZSBzZSBtb3ZpbGl6YW4gZW4gbGFzIGNhbGxlcyBhbnRlcyB5IGRlc3B1w6lzIGRlIGNhZGEgdW5hIGRlIGxhcyBtZWRpZGFzLCBUaWVtcG8sIE1lZGlkYXMgYXBsaWNhZGFzOgoKKk1lZGlhICh2YWxvcik6IHBlcm1pdGlyw6EgIGNvbm9jZXIgZW4gcHJvbWVkaW8gY3XDoW50b3MgIGNpdWRhZGFub3MgbGltZcOxb3Mgc2UgbW92aWxpemFuICBhbnRlcyB5IGRlc3B1w6lzIGRlIGxhIG1lZGlkYQoKKk1lZGlhbmEsIGN1YXJ0aWxlcyAodmFsb3IpOiBwZXJtaXRpcsOhIHNhYmVyIGN1w6FudG9zIGNpdWRhZGFub3MgbGltZcOxb3Mgc2UgbW92aWxpemFuIGFsIDI1JSwgNTAlOyA3NSUsIDEwMCUgIGRlbCB0aWVtcG8gZGUgZXN0dWRpbywgZGUgZXN0YSBtYW5lcmEgc2UgY29ub2NlcsOhICBlbCBlZmVjdG8gZGUgbGEgbW92aWxpemFjacOzbiBjb24gZWwgdHJhbnNjdXJzbyBkZWwgdGllbXBvIHBhcmEgY2FkYSBtZWRpZGEuCgoqRGVzdmlhY2nDs24gZXN0w6FuZGFyOiBwZXJtaXRpcsOhIHNhYmVyIGN1w6FudGFzIHNvbiBsYXMgdmFyaWFjaW9uZXMgcHJvbWVkaW8gIGRlIG1vdmlsaXphY2nDs24gc29jaWFsIHJlc3BlY3RvIGEgbGEgbWVkaWEgIAoKLUNhbnRpZGFkIGRlIGluZmVjdGFkb3MgcG9yIGTDrWEsIFRpZW1wbzoKCipNZWRpYSh2YWxvcik6IHBlcm1pdGlyw6EgY29ub2NlciBjdcOhbnRvIGVzIGxhIHRhc2EgaW5mZWN0YWRvcyBxdWUgIGh1Ym8gZW4gcHJvbWVkaW8gYW50ZXMgeSBkZXNwdcOpcyBkZSBtZWRpZGEgYXBsaWNhZGEKCipNZWRpYW5hLCBjdWFydGlsZXMgKHZhbG9yKTogcGVybWl0aXLDoSBzYWJlciBjdcOhbnRvcyBpbmZlY3RhZG9zIGh1Ym8gYWwgMjUlLCA1MCU7NzUlLCAxMDAlICBkZWwgdGllbXBvIGRlIGVzdHVkaW8sIGRlIGVzdGEgbWFuZXJhIHNlIGNvbm9jZXLDoSAgZWwgZWZlY3RvIGRlbCBuw7ptZXJvIGRlIGluZmVjdGFkb3MgY29uIGVsIHRyYW5zY3Vyc28gZGVsIHRpZW1wbyBwYXJhIGNhZGEgbWVkaWRhLgoKKkRlc3ZpYWNpw7NuIGVzdMOhbmRhcjogcGVybWl0aXLDoSBzYWJlciBjdcOhbnRhcyBzb24gbGFzIHZhcmlhY2lvbmVzIHByb21lZGlvIGRlIGluZmVjdGFkb3MgcmVzcGVjdG8gYSBsYSBtZWRpYS4KCiNWYXJpYWJsZXMgRW5jdWVzdGFzCgotRnJlY3VlbmNpYSBkZSBzYWxpZGEgcHJvbWVkaW8gYSBsYSBzZW1hbmEgLGFudGVzIHkgZGVzcHXDqXMgZGUgY2FkYSBtZWRpZGEgZGVsIGdvYmllcm5vCgpNZWRpYW5hLCBjdWFydGlsZXMgKHZhbG9yKTogcGVybWl0aXLDoSBzYWJlciBjdcOhbnRhcyBzYWxpZGFzIGEgbGEgc2VtYW5hIHJlcHJlc2VudGEgMjUlLDUwJSw3NSUgZGUgbG9zIGNpdWRhZGFub3MgZGUgTGltYSBlbmN1ZXN0YWRvcyBwYXJhIGNhZGEgbWVkaWRhCgpNb2RhICh2YWxvcik6IHBlcm1pdGlyw6Egc2FiZXIgbGEgZnJlY3VlbmNpYSBkZSBzYWxpZGEgbWF5b3JpdGFyaWEgZGUgbG9zIGNpdWRhZGFub3MgZGUgTGltYSBlbmN1ZXN0YWRvcwoKLVRpcG8gZGUgdHJhYmFqbywgRnJlY3VlbmNpYSBkZSBzYWxpZGEgcHJvbWVkaW8gYSBsYSBzZW1hbmEgLGFudGVzIHkgZGVzcHXDqXMgZGUgY2FkYSBtZWRpZGEgZGVsIGdvYmllcm5vCgpWYXJpYWJsZSBkaWNvdG9taXphZGEgVGlwbyBkZSB0cmFiYWpvPTAsMQoKQ29lZmljaWVudGUgZGUgY29ycmVsYWNpw7NuIGJpc2VyaWFsOiBpbmRpY2Fyw6EgY3XDoW4gcmVsYWNpb25hZG8gZXN0w6EgZWwgdGlwbyBkZSB0cmFiYWpvIGNvbiBsYSBmcmVjdWVuY2lhIGRlIHNhbGlkYQoKCi1FZGFkLCBGcmVjdWVuY2lhIGRlIHNhbGlkYSBwcm9tZWRpbyBhIGxhIHNlbWFuYSAsYW50ZXMgeSBkZXNwdcOpcyBkZSBjYWRhIG1lZGlkYSBkZWwgZ29iaWVybm8sIE1lZGlkYSBhcGxpY2FkYQoKTWVkaWE6IHBlcm1pdGlyw6EgY29ub2NlciBsYSBlZGFkIHByb21lZGlvIHBhcmEgY2FkYSBmcmVjdWVuY2lhIGRlIHNhbGlkYSBwcm9tZWRpbyB5IHBhcmEgY2FkYSBtZWRpZGEKCkNvZWZpY2llbnRlIGRlIGNvcnJlbGFjacOzbiBiaXNlcmlhbDogaW5kaWNhcsOhIGN1w6FuIHJlbGFjaW9uYWRvIGVzdMOhIGxhIGVkYWQgY29uIGxhIGZyZWN1ZW5jaWEgZGUgc2FsaWRhCgotRGlzdHJpdG8sIEZyZWN1ZW5jaWEgZGUgc2FsaWRhIHByb21lZGlvIGEgbGEgc2VtYW5hICxhbnRlcyB5IGRlc3B1w6lzIGRlIGNhZGEgbWVkaWRhIGRlbCBnb2JpZXJubyB5IG1lZGlkYSBhcGxpY2FkYQoKTW9kYSh2YWxvcik6IHBlcm1pdGlyw6EgY29ub2NlciBlbiBxdcOpIGRpc3RyaXRvIGluY2lkZW4gbcOhcyBlbiBsYXMgdmVjZXMgZGUgc2FsaWRhIGRlIGxhcyBwZXJzb25hcwoKLUNsYXNlIHNvY2lhbAoKTW9kYSh2YWxvcik6IHBlcm1pdGlyw6EgY29ub2NlciBlbCBuaXZlbCBkZSBpbmdyZXNvcyBwb3IgY2FkYSBkaXN0cml0by4KCiNEZXNjcmlwdG9yZXMgZ3LDoWZpY29zCgpVdGlsaXphcmVtb3M6CgpHcsOhZmljYSBkZSBkaXNwZXJzacOzbiBwYXJhIG5vdGFyIGbDoWNpbG1lbnRlIGNvbW8gYXVtZW50YSBvIGRlY3JlY2UgbGEgY2FudGlkYWQgZGUgaW5mZWN0YWRvcyBlIGluZmVjdGFkb3MgcG9yIGRpYSBhbnRlcyB5IGRlc3B1w6lzIGRlIHF1ZSBzZSBhcGxpcXVlIGxhIG1lZGlkYS4KQWRlbcOhcywgbGEgZ3LDoWZpY2EgZGUgZGlzcGVyc2nDs24gbm9zIHB1ZWRlIGF5dWRhciBhIGVuY29udHJhciB1bmEgcmVsYWNpw7NuIHkvbyBwYXRyw7NuIGVudHJlIGxhIGNhbnRpZGFkIGRlIGluZmVjdGFkb3MgeS9vIG1vdmlsaXphY2nDs24gc29jaWFsIHkgbG9zIGTDrWFzIHRyYW5zY3Vycmlkb3MgZGVzZGUgcXVlIHNlIGVtcGxlw7MgY2FkYSBtZWRpZGEuCgpUYW1iacOpbiB1dGlsaXphcmVtb3MgdW4gZ3LDoWZpY28gZGUgY2FqYSBkZSBiaWdvdGVzIHBhcmEgZGlmZXJlbmNpYXIgbGFzIGVkYWRlcyBkZSBsb3MgZW50cmV2aXN0YWRvcyBkZSBtYW5lcmEgcsOhcGlkYSB5IGVmZWN0aXZhLiBFc3RvIG5vcyBwZXJtaXRpcsOhIHZlciBsYSByZWxhY2nDs24gZW50cmUgbGFzIGVkYWRlcyB5IHJlc3B1ZXN0YXMgZGFkYXMgcG9yIGxhcyBwZXJzb25hcy4gCgpBZGVtw6FzLCBzZSB1dGlsaXphcsOhbiBncsOhZmljb3MgZGUgYmFycmFzIHByaW5jaXBhbG1lbnRlIHBhcmEgdmlzdWFsaXphciB5IGFuYWxpemFyIGxhcyByZXNwdWVzdGFzIGN1YWxpdGF0aXZhcy4gQ29uIGxvcyBncsOhZmljb3MgZGUgYmFycmFzIHNlIHBvZHLDoW4gdmVyIGN1YWxlcyBoYW4gc2lkbyBsYXMgcmVzcHVlc3RhcyBjdWFsaXRhdGl2YXMgcmVzcG9uZGlkYXMgY29uIG3DoXMgeSBtZW5vcyBmcmVjdWVuY2lhLgoKRmluYWxtZW50ZSwgc2UgdXNhcsOhbiBoaXN0b2dyYW1hIHBhcmEgZGVzY3JpYmlyIGxhcyB2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcyBxdWUgcHVlZGVuIHNlciBkaXN0cmlidWlkYXMgZW4gcmFuZ29zLiBFc3RvIG5vcyBmYWNpbGl0YXLDoSBhbmFsaXphciBsb3MgZGF0b3MgY29uIG11Y2hvcyB2YWxvcmVzIG8gcmVzcHVlc3RhcyBwb3NpYmxlcy4KCgojIyBQbG90cyB5IG90cmFzIGNvc2FzCmBgYHtyfQojIGN1cmwgLUxzICIkdXJsIiA+IGRmX2Zvcm0uY3N2Cgp0bXAgPC0gdGVtcGZpbGUoKQpjdXJsX2Rvd25sb2FkKCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9zcHJlYWRzaGVldHMvZC9lLzJQQUNYLTF2UzVGd3NLSGw0UGh1a0lIZlNHYmZBOE5DUTVTcUJEcFExNktDNjlKQ2lGQVdWZUo0MEJBQ3AwZHFoQlRrSGk5Y3BMRV9KbUVtSXZmZHZBL3B1Yj9naWQ9NjM3MTAwODQzJnNpbmdsZT10cnVlJm91dHB1dD1jc3YiLCB0bXApCnJlYWRfY3N2KHRtcCkgLT4gZGZfZm9ybTEKCiMgU2VndW5kYSBlbmN1ZXN0YQp0bXAgPC0gdGVtcGZpbGUoKQpjdXJsX2Rvd25sb2FkKCJodHRwczovL2RvY3MuZ29vZ2xlLmNvbS9zcHJlYWRzaGVldHMvZC9lLzJQQUNYLTF2UzVGd3NLSGw0UGh1a0lIZlNHYmZBOE5DUTVTcUJEcFExNktDNjlKQ2lGQVdWZUo0MEJBQ3AwZHFoQlRrSGk5Y3BMRV9KbUVtSXZmZHZBL3B1Yj9naWQ9NjM3MTAwODQzJnNpbmdsZT10cnVlJm91dHB1dD1jc3YiLCB0bXApCgpyZWFkX2Nzdih0bXApICU+JQogICAgcmVuYW1lKAogICAgICAgIHRpZW1wbyA9ICJNYXJjYSB0ZW1wb3JhbCIsCiAgICAgICAgZWRhZCA9ICLCv0N1w6FsIGVzIHR1IGVkYWQ/IiwKICAgICAgICBnZW5lcm8gPSAiwr9EZSBxdcOpIGfDqW5lcm8gZXJlcz8iLAogICAgICAgIGluZ3Jlc28gPSAiwr9DdcOhbnRvIGVzIGVsIGluZ3Jlc28gbWVuc3VhbCBwcm9tZWRpbyBkZSB0dSBmYW1pbGlhIGFwcm94aW1hZGFtZW50ZSAoc29sZXMpID8iLAogICAgICAgIGRpc3RyaXRvID0gIsK/RW4gcXXDqSBkaXN0cml0byB2aXZlcz8iLAogICAgICAgIGVzdHVkaW8gPSAiwr9DdcOhbCBmdWUgZWwgw7psdGltbyBuaXZlbCBlZHVjYXRpdm8gcXVlIGNvbXBsZXRhc3RlPyIsCiAgICAgICAgZW1wbGVvID0gIsK/Q3XDoWwgZXMgdHUgdGlwbyBkZSBlbXBsZW8/IiwKICAgICAgICBzYWxpZGFzID0gIsK/Q3XDoW50YXMgdmVjZXMgYSBsYSBzZW1hbmEsIGVuIHByb21lZGlvLCBzYWzDrWFzIGRlIGNhc2EgZHVyYW50ZSBsb3MgZMOtYXMgZGUgY3VhcmVudGVuYT8iLAogICAgICAgIHJhem9uZXMgPSAiwr9Qb3IgcXXDqSByYXpvbmVzIHNhbMOtYXMgZHVyYW50ZSBsYSBjdWFyZW50ZW5hPyIsCiAgICAgICAgc29jaWFsLmJvb2wgPSAiwr9MYSBtZWRpZGEgZGUgXCJJbm1vdmlsaXphY2nDs24gc29jaWFsXCIsIHJlYWxtZW50ZSBoaXpvIHF1ZSB0dXMgc2FsaWRhcyBkdXJhbnRlIHRvZGEgbGEgY3VhcmVudGVuYSBmdWVyYW4gbXV5IHBvY2FzPyIsCiAgICAgICAgc29jaWFsLjA1ID0gIlJlc3BlY3RvIGEgbGEgYW50ZXJpb3IgcHJlZ3VudGEuIERlbCAwIGFsIDUsIMK/IEVuIGN1w6FudG8gZGlzbWludXnDsyB0dXMgc2FsaWRhcyBkdXJhbnRlIGxhIGN1YXJlbnRlbmE/IiwKICAgICAgICBvY2lvLmJvb2wgPSAiwr8gTGEgXCJTdXNwZW5zacOzbiBkZSBhY2Nlc28gYSBsdWdhcmVzIHDDumJsaWNvczogbHVnYXJlcyBkZSBvY2lvLCByZXN0YXVyYW50ZXMsIGV0Y1wiLCB0ZSBkZXNhbmltw7Mgc2FsaXIgZGUgY2FzYT8iLAogICAgICAgIG9jaW8uMDUgPSAiUmVzcGVjdG8gYSBsYSBhbnRlcmlvciBwcmVndW50YS4gRGVsIDAgYWwgNSwgwr9DdcOhbnRvIHRlIGRlc2FuaW3DsyBzYWxpciBkZSBjYXNhPyIsCiAgICAgICAgbm9kYXkuYm9vbCA9ICLCv0xhIG1lZGlkYSBcIkRpc3Bvc2ljacOzbiBzYWxpZGEgZGUgaG9tYnJlcyB5IG11amVyZXMgZW4gZMOtYXMgY29tcGxlbWVudGFyaW9zIChsdW5lcy1tacOpcmNvbGVzLXZpZXJuZXMgLyBtYXJ0ZXMtanVldmVzLXPDoWJhZG9zKVwiLCBnYXJhbnRpem8gcXVlIHNhbGllcmFzIG1lbm9zIHF1ZSBhbnRlcz8iLAogICAgICAgIG5vZGF5LjA1ID0gIlJlc3BlY3RvIGEgbGEgYW50ZXJpb3IgcHJlZ3VudGEuIERlbCAwIGFsIDUsIMK/Q3XDoW50byBjYW1iaW8gdHVzIHNhbGlkYXM/IiwKICAgICAgICBtdWx0YS5ib29sID0gIsK/IExhIG1lZGlkYSBcIk11bHRhIGRlIFMvLjg2IC1TLy4zNDAgcGFyYSB0b2RhcyBsYXMgcGVyc29uYXMgcXVlIGRlc29iZWRlY2VuIGRpc3Bvc2ljaW9uZXMgZGVsIGdvYmllcm5vXCIsIGhpem8gcXVlIHR1cyBzYWxpZGFzIGRlIGNhc2EgZnVlcmFuIG1lbm9yZXM/IiwKICAgICAgICBtdWx0YS4wNSA9ICJSZXNwZWN0byBhIGxhIGFudGVyaW9yIHByZWd1bnRhLiBEZWwgMCBhbCA1LCDCv0N1w6FuIG1lbm9yZXMgZnVlcm9uIHR1cyBzYWxpZGFzPyIsCiAgICAgICAgYm9uby5ib29sID0gIsK/IExhIG1lZGlkYSBcIkVudHJlZ2EgZGUgYm9ubyBTLy4gMzgwLCBTLy43NjAgZGUgYWN1ZXJkbyBhbCBTaXN0ZW1hIGRlIEZvY2FsaXphY2nDs24gZGUgSG9nYXJlcyAoU0lTRk9IKSBcIiwgcGVybWl0acOzIHF1ZSByZWR1amVyYXMgdHVzIHNhbGlkYXMgZGUgY2FzYT8iLAogICAgICAgIGJvbm8uMDUgPSAiUmVzcGVjdG8gYSBsYSBhbnRlcmlvciBwcmVndW50YS4gRGVsIDAgYWwgNSwgwr9DdcOhbnRvIHNlIHJlZHVqbyB0dXMgc2FsaWRhcz8iLAogICAgICAgIGFmcDEuYm9vbCA9ICLCvyBMYSBtZWRpZGEgXCJSZXRpcm8gZGUgaGFzdGEgUy8uIDIwMDAgZGUgZm9uZG9zIEFGUCBkZSB0cmFiYWphZG9yZXMgYWZpbGlhZG9zIHF1ZSBubyB0aWVuZW4gcGxhbmlsbGFcIiwgdGUgbWFudHV2byBtw6FzIHRpZW1wbyBlbiBjYXNhPyIsCiAgICAgICAgYWZwMS4wNSA9ICJSZXNwZWN0byBhIGxhIGFudGVyaW9yIHByZWd1bnRhLiBEZWwgMCBhbCA1LCDCvyBDdcOhbiBtw6FzIHRlIG1hbnR1dmlzdGUgZW4gY2FzYT8iLAogICAgICAgIGFmcDIuYm9vbCA9ICLCvyBMYSBtZWRpZGEgXCJSZXRpcm8gZGVsIDI1JSBkZSBmb25kb3MgQUZQIHBhcmEgdHJhYmFqYWRvcmVzIGFmaWxpYWRvc1wiLCB0ZSBtYW50dXZvIG3DoXMgdGllbXBvIGVuIGNhc2E/IiwKICAgICAgICBhZnAyLjA1ID0gIlJlc3BlY3RvIGEgbGEgYW50ZXJpb3IgcHJlZ3VudGEuIERlbCAwIGFsIDUsIMK/Q3XDoW50byB0aWVtcG8gbcOhcyB0ZSBtYW50dXZvIGVuIGNhc2E/IiwKICAgICAgICBkZWNjZWxlcmF0aW9uID0gIsK/UXXDqSBjb25kaWNpb25lcyBjcmVlcyBxdWUgZXhpc3RlbiBlbiB0dSBkaXN0cml0byBxdWUgcmV0YXJkYW4gbGEgcHJvcGFnYWNpw7NuIGRlbCBDb3ZpZD8iLAogICAgICAgIGFjY2VsZXJhdGlvbiA9ICLCv1F1w6kgY29uZGljaW9uZXMgY3JlZXMgcXVlIGV4aXN0ZW4gZW4gdHUgZGlzdHJpdG8gcXVlIGFjZWxlcmFuIGxhIHByb3BhZ2FjacOzbiBkZWwgQ292aWQ/IgogICAgKSAlPiUKICAgIG11dGF0ZSgKICAgICAgICBnZW5lcm8gPSBhcy5mYWN0b3IoZ2VuZXJvKSwKICAgICAgICBpbmdyZXNvID0gYXMuZmFjdG9yKGluZ3Jlc28pLAogICAgICAgIGRpc3RyaXRvID0gYXMuZmFjdG9yKGRpc3RyaXRvKSwKICAgICAgICBlc3R1ZGlvID0gZmFjdG9yKGVzdHVkaW8sIGxldmVscyA9IGMoIlNlY3VuZGFyaWEiLCAiVMOpY25pY2EiLCAiVW5pdmVyc2l0YXJpYSIsICJQb3NncmFkbyIpKSwKICAgICAgICBlbXBsZW8gPSBmYWN0b3IoZW1wbGVvLCBsZXZlbHMgPSBjKCJObyB0cmFiYWpvIiwgIkluZm9ybWFsIiwgIkZvcm1hbCIpKSwKICAgICAgICAjIEVzdGViYW4gTmljb2xhcyBWaWxsYWNvcnRhIEdhcmNpYSBjYW1iacOzIGxhcyByZXNwdWVzdGFzIGRlIGxhIGVuY3Vlc3RhCiAgICAgICAgIyBkZSAiTWF5b3IgNSIgYSA2LgogICAgICAgIHNhbGlkYXMgPSByZXBsYWNlKHNhbGlkYXMsIHNhbGlkYXM9PSI2IiwgIk1heW9yIDUiKSwKICAgICAgICBzYWxpZGFzID0gZmFjdG9yKHNhbGlkYXMsIGxldmVscyA9IGMoMDo1LCAiTWF5b3IgNSIpKSwKICAgICAgICByYXpvbmVzID0gc3Ryc3BsaXQocmF6b25lcywgIiwgIiksCiAgICAgICAgc29jaWFsLmJvb2wgPSBzb2NpYWwuYm9vbCA9PSAiU8OtIiB8IHNvY2lhbC5ib29sID09ICJTaSIsCiAgICAgICAgb2Npby5ib29sID0gb2Npby5ib29sID09ICJTw60iIHwgb2Npby5ib29sID09ICJTaSIsCiAgICAgICAgbm9kYXkuYm9vbCA9IG5vZGF5LmJvb2wgPT0gIlPDrSIgfCBub2RheS5ib29sID09ICJTaSIsCiAgICAgICAgbXVsdGEuYm9vbCA9IG11bHRhLmJvb2wgPT0gIlPDrSIgfCBtdWx0YS5ib29sID09ICJTaSIsCiAgICAgICAgYm9uby5ib29sID0gYm9uby5ib29sID09ICJTw60iIHwgYm9uby5ib29sID09ICJTaSIsCiAgICAgICAgYWZwMS5ib29sID0gYWZwMS5ib29sID09ICJTw60iIHwgYWZwMS5ib29sID09ICJTaSIsCiAgICAgICAgYWZwMi5ib29sID0gYWZwMi5ib29sID09ICJTw60iIHwgYWZwMi5ib29sID09ICJTaSIsCiAgICAgICAgYWNjZWxlcmF0aW9uID0gc3Ryc3BsaXQoYWNjZWxlcmF0aW9uLCAiLCAiKSwKICAgICAgICBkZWNjZWxlcmF0aW9uID0gc3Ryc3BsaXQoZGVjY2VsZXJhdGlvbiwgIiwgIikKICAgICkgLT4gZGZfZm9ybTIKYGBgCgojIyMgRWRhZCBkZSBsYSBtdWVzdHJhCmBgYHtyfQpzdW1tYXJ5KGRmX2Zvcm0yJGVkYWQpCmJveHBsb3QoZGZfZm9ybTIkZWRhZCwgeGxhYiA9ICIiLCB5bGFiID0gIkVkYWQiLCBtYWluPU5VTEwpCnRpdGxlKCJHcsOhZmljbyAxLiBFZGFkIikKYGBgCgpNaW4uIDFzdCBRdS4gIE1lZGlhbiAgICBNZWFuIDNyZCBRdS4gICAgTWF4LiAKICAxNy4wMCAgIDIzLjAwICAgMzIuMDAgICAzNC41NyAgIDQ2LjAwICAgNjAuMDAgCgpuID0gMzEwLCBzZCA9IDEyLjYxOQoKUG9kZW1vcyBhc8OtIGRldGVybWluYXIgZWwgaW50ZXJ2YWxvIGRlIGNvbmZpYW56YSBjYWxjdWxhbmRvOgoKZGVzdi9zcXJ0KG4pID0gMTIuNjE5IC9zcXJ0KDMxMCkgPTAuNzE2Nwp6IHQgYWxmYS8yID0gMS45NgoKVS5Cb3VuZCA9PiAzNC41NyArIDEuOTYgKiAxMi42MTkgPSA1OS4zMApMLkJvdW5kICA9PiAzNC41NyAtIDEuOTYgKiAxMi42MTkgPSA5Ljg0CgpTZSBzYWJlIHBvciB0YW50byBxdWUgbGEgbWVkaWEgcmVhbCBzZSBwdWVkZSBlbmNvbnRyYXIgZW4gWzkuODQsIDU5LjMwXSBjb24gOTUlIGRlIGNlcnRlemEuCgojIyMgR8OpbmVybwpgYGB7cn0KZGZfZm9ybTIgJT4lCiAgICBncm91cF9ieShnZW5lcm8pICU+JQogICAgc3VtbWFyaXNlKG4gPSBuKCkpICU+JQogICAgYmFycGxvdChufmdlbmVybywgZGF0YT0uLCB4bGFiPSJQZXJzb25hcyIsIHlsYWI9IkNhbnRpZGFkIikKCnRpdGxlKCJHcsOhZmljbyAyLiBHw6luZXJvIikKYGBgCgojIyMgSW5ncmVzbyBwcm9tZWRpbwoKYGBge3J9CnBhcihtYWkgPSBjKDAuOCwgMS41LCAwLjIsIDAuNSkpCmRmX2Zvcm0yICU+JQogICAgZ3JvdXBfYnkoaW5ncmVzbykgJT4lCiAgICBzdW1tYXJpc2UobiA9IG4oKSkgJT4lCiAgICBiYXJwbG90KG5+aW5ncmVzbywgZGF0YT0uLCBob3JpeiA9IFRSVUUsIGxhcyA9IDIsIHhsYWIgPSAiUGVyc29uYXMiLCB5bGFiPSIiKQp0aXRsZSh5bGFiPSJJbmdyZXNvIiwgbGluZT02KQp0aXRsZSgiR3LDoWZpY28gMy4gSW5ncmVzb3MiKQpgYGAKCiMjIyBEaXN0cml0bwpgYGB7ciwgZmlnLndpZHRoPTEyLCBmaWcuaGVpZ2h0PTIwfQpwYXIobWFpID0gYygxLCAyLCAwLjUsIDAuNSkpCiNwbG90KGVkYWR+ZGlzdHJpdG8sIGRhdGEgPSBkZl9mb3JtMiwgaG9yaXpvbnRhbD1UUlVFLCBsYXM9MiwgeGxhYj0iIikKI3RpdGxlKHlsYWI9IkRpc3RyaXRvIiwgbGluZT04KQoKZGZfZm9ybTIkZGlzdHJpdG8gJT4lCiAgICB0YWJsZSgpICU+JQogICAgc29ydChUUlVFKSAlPiUKICAgIGJhcnBsb3QoaG9yaXogPSBUUlVFLCBsYXMgPSAyLCB4bGFiID0gIlBlcnNvbmFzIiwgeWxhYj0iIikKdGl0bGUoIkdyw6FmaWNvIDQuIERpc3RyaXRvIikKYGBgCgojIyMgRW1wbGVvCmBgYHtyfQpwYXIobWFpID0gYygxLCAxLjUsIDAuNSwgMC41KSkKZGZfZm9ybTIkZW1wbGVvICU+JQogICAgdGFibGUoKSAlPiUKICAgIHNvcnQoVFJVRSkgJT4lCiAgICBiYXJwbG90KGhvcml6ID0gVFJVRSwgbGFzID0gMiwgeGxhYiA9ICJQZXJzb25hcyIsIHlsYWI9IiIpCgp0aXRsZSgiR3LDoWZpY28gNS4gVGlwbyBkZSB0cmFiYWpvIikKYGBgCgojIyMgwr9RdcOpIHRhbnRvIHZhcsOtYW4gbGFzIGNpZnJhcyBkZSBudWV2b3MgaW5mZWN0YWRvcyBkdXJhbnRlIGxvcyBwZXJpb2RvcyBkZSBpbnN0YXVyYWNpw7NuIHByZXZpb3MtcG9zdGVyaW9yZXMgYSBsYSBtZWRpZGE/CgpQYXJhIGVzdGEgcHJpbWVyYSBwcmVndW50YSBzZSBoYW4gcHJvY2VzYWRvIGxvcyBkYXRvcyB3ZWIuIFNlIHByZXNlbnRhcsOhbiBkb3MgZ3LDoWZpY29zIHBvciBjYWRhIHVuYSBkZSBsYXMgY3VhdHJvIG1lZGlkYXMgcXVlIHNlIGFuYWxpemFyw6FuLiBFbCBwcmltZXJvIGRlIGVsbG9zIHNlcsOhIGRlIGxvcyBudWV2b3MgY2Fzb3MgeSBlbCBzZWd1bmRvIGRlIGxhIG1vdmlsaXphY2nDs24gcmVjcmVhY2lvbmFsIChjYW1iaW9zIGVuIGxhIG1vdmlsaXphY2nDs24pLiBMb3MgZGVzY3JpcHRvcmVzIHF1ZSBzZSBlc3TDoW4gdXRpbGl6YW5kbyBwYXJhIGRlc2NyaWJpciBtZWpvciBsb3MgZGF0b3Mgb2J0ZW5pZG9zIGVzIGxhIG1lZGlhIHkgbWVkaWFuYS4gRXMgbmVjZXNhcmlvIGRlc3RhY2FyIHF1ZSBzZSBoYSBvcHRhZG8gcG9yIGdyYWZpY2FyIGxvcyBkYXRvcyBkaWV6IGTDrWFzIGFudGVzIGRlIHF1ZSBzZSBkZWNyZXRlIGxhIG1lZGlkYSB5IGRpZXogZMOtYXMgZGVzcHXDqXMgZGUgaGFiZXJzZSBwcm9tdWxnYWRvLgojIyBEZWNsYXJhY2nDs24gZGVsIEVzdGFkbyBkZSBFbWVyZ2VuY2lhCiMgSW5jb3Jwb3JhciBlbCBuwrAgZGUgR3LDoWZpY28gNi4gCmRlY2xhcmFjacOzbiBudWV2b3MgY2Fzb3MKCmBgYHtyLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSxyZXN1bHRzPSJhc2lzIn0KI3JlcGVhdF9wbG90cygiMjAyMC0wMy0xNSIsIDEwLCAiRGVjbGFyYWNpw7NuIGRlIEVzdGFkbyBkZSBFbWVyZ2VuY2lhIikKCmNhdF9wbG90KGx1YnJpZGF0ZTo6eW1kKCIyMDIwLTAzLTE1IiksIDEwLCAiRGVjbGFyYWNpw7NuIGRlbCBlc3RhZG8gZGUgRW1lcmdlbmNpYSIsIHBsb3RfbmV3X2Nhc2VzLCAiTnVldm9zIGNhc29zIikKCiNkYXkgPC0gbHVicmlkYXRlOjp5bWQoZGF5KQojY2F0X3Bsb3QoZGF5LCByYW5nZSwgbWFpbl90aXRsZSwgcGxvdF9uZXdfY2FzZXMsICJOdWV2b3MgY2Fzb3MiKQojY2F0X3Bsb3QoZGF5LCByYW5nZSwgbWFpbl90aXRsZSwgcGxvdF9ybW92ZXMsICJNb3ZpbGl6YWNpw7NuIHJlY3JlYWNpb25hbCIpCmBgYAoKRW4gZXN0YSBncsOhZmljYSBwb2RlbW9zIHZpc3VhbGl6YXIgcXVlIGxhIGNhbnRpZGFkIGRlIGluZmVjdGFkb3MgcG9yIGTDrWEgYmFqw7MgZW4gYWxndW5vcyBkw61hcyBpbm1lZGlhdGFtZW50ZSBkZXNwdcOpcyBkZSBxdWUgc2UgZGVjbGFyYXLDoSBlbCBlc3RhZG8gZGUgZW1lcmdlbmNpYS4gU2UgcHVlZGUgYXByZWNpYXIgZW4gbGEgZ3LDoWZpY2EgcXVlIHNlIGxsZXZhIGEgY2FibyBjYWRhIDIgbyAzIGTDrWFzIGR1cmFudGUgbGEgc2VtYW5hIHNpZ3VpZW50ZSBhIGxhIGltcGxlbWVudGFjacOzbiBkZWwgRXN0YWRvIGRlIEVtZXJnZW5jaWEuIEVzdG8gc2UgcG9kcsOtYSBkZWJlciBhIGZhY3RvcmVzIGNvbW8gbGEgY2FudGlkYWQgZGUgcHJ1ZWJhcyB0b21hZGFzIHBvciBkw61hLCBmcmVjdWVuY2lhIGRlIHNhbGlkYSBkZSBsYXMgcGVyc29uYXMgeSBlbCBjdW1wbGltaWVudG8gZGUgbGFzIGxleWVzIHkgbWVkaWRhcyB0b21hZGFzLiAKClBhcmEgYW5hbGl6YXIgZXN0YSBncsOhZmljYSwgc2UgYXN1bWUgcXVlIGVsIGNyZWNpbWllbnRvIGRlIGxhIGVuZmVybWVkYWQgYmFqbyBjb25kaWNpb25lcyBub3JtYWxlcyBlcyBleHBvbmVuY2lhbC4gUG9yIHRhbnRvLCBzZSBwdWVkZSBjb25zdHJ1aXIgdW4gbW9kZWxvIHRhbCBxdWU6CmxuKHkpIEF0K0IuIFRvbWFuZG8gYSBMMWNvbW8gcmVncmVzacOzbiBkZSBjb250cm9sIHNpbiB2YXJpYWJsZSBpbmRlcGVuZGllbnRlIHkgTDJsYSByZWdyZXNpw7NuIGx1ZWdvIGRlIGFwbGljYXJzZSBsYSBtZWRpZGEsIHNlIHJlYWxpesOzIHVuIEYtdGVzdCBwYXJhIGNvbXByb2JhciBzaSBlbCBtb2RlbG8gTDFtb2RlbGEgYSBMMiBzaW4gZGlmZXJlbmNpYXMgc2lnbmlmaWNhdGl2YXMuCgotSG8gOiBObyBleGlzdGVuIGRpZmVyZW5jaWFzIHNpZ25pZmljYXRpdmFzIGVudHJlIGFtYm9zIG1vZGVsb3MgCi1IYSA6IEV4aXN0ZW4gZGlmZXJlbmNpYXMgc2lnbmlmaWNhdGl2YXMgZW50cmUgZWwgbW9kZWxvIGFudGVyaW9yIGEgbGEgbWVkaWRhIHkgZWwgYWN0dWFsLgoKSU1BR0VOCgpEYWRvIHF1ZSBsYSB2YXJpYW56YSAxID4gdmFyaWFuemEgMiwgbGEgZWxlY2Npw7NuIGRlbCBvcmRlbiBkZSBsYXMgdmFyaWFibGVzIGVzIGNvcnJlY3RhLiBQb3IgdGFudG8sIGRhZG8gRiA+IEYgY3LDrXRpY28sIHNlIGVuY3VlbnRyYSBldmlkZW5jaWEgcGFyYSBmYWxzZWFyIEhvLiBEYWRvID4gUChGPD1mKSB1bmEgY29sYSwgc2UgcmVjaGF6YSBsYSBoaXDDs3Rlc2lzIG51bGEsIHBvciBsbyBxdWUgZXhpc3RlbiBkaWZlcmVuY2lhcyBzaWduaWZpY2F0aXZhcy4gQ29tcGFyYW5kbyBsYXMgcGVuZGllbnRlcyBBMT0wLjMzNyB5IEEyPTAuMDcyOSBjb24gQTIgPEExLCBzZSBwdWVkZSBhc3VtaXIgcXVlIHNlIGZyZW7DsyBsYSBleHBhbnNpw7NuIGRlIGxhIGVuZmVybWVkYWQuCgojbmNvcnBvcmFyIGVsIG7CsCBkZSBHcsOhZmljbyA3LiB0w610dWxvCm1pc21hIG1lZGlkYSBwZXJvIGxhIGRlIGNhbWJpbwoKUExPVAoKYGBge3IsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHJlc3VsdHM9ImFzaXMifQojcmVwZWF0X3Bsb3RzKCIyMDIwLTAzLTE1IiwgMTAsICJEZWNsYXJhY2nDs24gZGUgRXN0YWRvIGRlIEVtZXJnZW5jaWEiKQoKY2F0X3Bsb3QobHVicmlkYXRlOjp5bWQoIjIwMjAtMDMtMTUiKSwgMTAsICJEZWNsYXJhY2nDs24gZGVsIGVzdGFkbyBkZSBFbWVyZ2VuY2lhIiwgcGxvdF9ybW92ZXMsICJNb3ZpbGl6YWNpw7NuIHJlY3JlYWNpb25hbCIpCgojZGF5IDwtIGx1YnJpZGF0ZTo6eW1kKGRheSkKI2NhdF9wbG90KGRheSwgcmFuZ2UsIG1haW5fdGl0bGUsIHBsb3RfbmV3X2Nhc2VzLCAiTnVldm9zIGNhc29zIikKI2NhdF9wbG90KGRheSwgcmFuZ2UsIG1haW5fdGl0bGUsIHBsb3Rfcm1vdmVzLCAiTW92aWxpemFjacOzbiByZWNyZWFjaW9uYWwiKQpgYGAKCkEgcGFydGlyIGRlbCBncsOhZmljbyA3LCBzZSBsb2dyYSB2aXN1YWxpemFyIHF1ZSBwcmV2aW8gYSBsYSBwcm9tdWxnYWNpw7NuIGRlIGxhIG1lZGlkYSDigJxEZWNsYXJhY2nDs24gZGUgRXN0YWRvIGRlIEVtZXJnZW5jaWHigJ0sIGxhIGdlbnRlIHRlbsOtYSBtdWNoYSBtw6FzIG1vdmlsaXphY2nDs24geSBsdWVnbyBkZSBkZWNyZXRhZGEsIGVsIGNhbWJpbyBkZSBtb3ZpbGl6YWNpw7NuIGRpc21pbnV5w7MgZW4gZ3JhbiBtZWRpZGEuIEVsIHByb21lZGlvIHkgbWVkaWFuYSAobMOtbmVhcyBjb250aW51YXMpIGFudGVzIGRlIHF1ZSBzZSBhcGxpcXVlIGVzdGEgbWVkaWRhIGVzIGFwcm94aW1hZGFtZW50ZSAtMy4gUG9yIG90cm8gbGFkbywgZWwgcHJvbWVkaW8geSBtZWRpYW5hIChsw61uZWFzIHB1bnRlYWRhcykgZGVzZGUgZWwgcXVpbmNlIGhhc3RhIGVsIHZlaW50aWNpbmNvIGVzdMOhIHBvciBkZWJham8gZGUgLTYwLgoKUGFyYSBjb21wcm9iYXIgbGEgc2lnbmlmaWNhbmNpYSBkZSBlc3RhIGRpZmVyZW5jaWEsIHNlIHJlYWxpesOzIHVuIHRlc3QtdCBkZSBtZWRpYXMuIFNlIGFzdW1pZXJvbiBsYXMgc2lndWllbnRlcyBoaXDDs3Rlc2lzOgoKLUhvIDogTm8gZXhpc3RlIHVuIGVmZWN0byBzaWduaWZpY2F0aXZvIGRlIGxhIG1lZGlkYSBwb3Igc29icmUgbGFzIG1lZGlhcyBkZWwgQ2FtYmlvIGRlIE1vdmlsaXphY2nDs24KLUhhIDogRXhpc3RlbiBkaWZlcmVuY2lhcyBzaWduaWZpY2F0aXZhcyBlbnRyZSBsYXMgbWVkaWFzIGRlIGxhIHZhcmlhYmxlIENhbWJpbyBkZSBNb3ZpbGl6YWNpw7NuIHBhcmEgYW50ZXMgeSBkZXNwdcOpcyBkZSBlamVjdXRhcnNlIGxhIG1lZGlkYS4KCltpbWFnZW5dCgpEYWRvIHF1ZSBlbCB2YWxvciB8dHwgPiB0LWNyw610aWNvIGRvcyBjb2xhcywgc2UgcHVlZGUgZW5jb250cmFyIGV2aWRlbmNpYSBwYXJhIHJlY2hhemFyIGxhIGhpcMOzdGVzaXMgbnVsYSBIby4gRGFkbyA9MC4wNSA+IFAoVDw9dCkgZG9zIGNvbGFzLCBleGlzdGUgc2lnbmlmaWNhbmNpYSBzdWZpY2llbnRlIHBhcmEgZWxsby4gUG9yIHRhbnRvLCBzZSByZWNoYXphIEhvLCBleGlzdGllbmRvIHBvciB0YW50byBkaWZlcmVuY2lhcyBzaWduaWZpY2F0aXZhcyBlbnRyZSBhbnRlcyBkZSBlamVjdXRhcnNlIGxhIGRlY2xhcmFjacOzbiBkZSBFc3RhZG8gZGUgRW1lcmdlbmNpYSB5IGRlc3B1w6lzIHNvYnJlIGxhIG1vdmlsaXphY2nDs24gZGUgbGFzIHBlcnNvbmFzLiBEZWJpZG8gYSBxdWUgZWwgY29lZmljaWVudGUgZGUgY29ycmVsYWNpw7NuIGVzIG1lbm9yIGEgMCwgc2UgcHVlZGUgYWZpcm1hciBxdWUgZWwgY2FtYmlvIGFkZW3DoXMgcmVkdWpvIGxhIG1vdmlsaXphY2nDs24uCiMjIEFwcm9iYWNpw7NuIGRlbCBQYWRyw7NuIGRlIEhvZ2FyZXMKCkVzdGUgZ3LDoWZpY28gbm9zIG11ZXN0cmEgbGEgY2FudGlkYWQgZGUgY2Fzb3MgZGlleiBkw61hcyBhbnRlcyB5IGRpZXogZMOtYXMgZGVzcHXDqXMgZGUgcXVlIGxhIG1lZGlkYSDigJxBcHJvYmFjacOzbiBkZWwgUGFkcsOzbiBkZSBIb2dhcmVz4oCdIGZ1ZXJhIGFwcm9iYWRhLiBFc3RhIGVzIHVuYSBncsOhZmljYSBtdXkgaW1wb3J0YW50ZSwgZGFkbyBxdWUgdGVuw61hIGNvbW8gb2JqZXRpdm8gYXl1ZGFyIGEgbGFzIHBvYmxhY2lvbmVzIG3DoXMgdnVsbmVyYWJsZXMgZW4gY29uZGljacOzbiBkZSBleHRyZW1hIHBvYnJlemEgYSBuaXZlbCBuYWNpb25hbCBwYXJhIHF1ZSBwdWRpZXJhbiBzdWJzaXN0aXIgZHVyYW50ZSBsYSBjdWFyZW50ZW5hLiBEaWNobyBlbiBvdHJhcyBwYWxhYnJhcywgcGFyYSBxdWUgcHVkaWVyYW4gYWNjZWRlciBhIGxvcyBzZXJ2aWNpb3MgYsOhc2ljb3MgeSBtZWRpY2FtZW50b3MsIGVuIGNhc28gZnVlc2VuIHJlcXVlcmlkb3MuIExhIGNhbnRpZGFkIGRlIGNhc29zIGFudGVzIGRlIHF1ZSBsYSBtZWRpZGEgZnVlc2UgZGVjbGFyYWRhLCAwOC8wMyBoYXN0YSAxOC8wMywgIHZhIGRlc2RlIGFwcm94aW1hZGFtZW50ZSB1bm8gaGFzdGEgdmVpbnRlLiBObyBvYnN0YW50ZSwgZGVzZGUgMTgvMDMgaGFzdGEgMjgvMDMgbGEgY2FudGlkYWQgZGUgY2Fzb3MgdmEgZW4gYXVtZW50by4gU2luIGR1ZGEgYWxndW5hLCBlbCBvYmpldGl2byBlcmEgYnVlbm8sIHBlcm8gcGFyYSBlbCBwYW5vcmFtYSBxdWUgc2UgZXN0YWJhIHZpdmllbmRvIG5vIGZ1ZSBlZmVjdGl2YS4gVW5hIHBvc2libGUgaGlww7N0ZXNpcyBzZXLDrWEgbGEgc2FsaWRhIG9ibGlnYXRvcmlhIGRlIGxvcyBiZW5lZmljaWFyaW9zIGEgbG9zIGJhbmNvcyBhIGZvcm1hciBsYXJnYXMgY29sYXMgZHVyYW50ZSBob3Jhcy4gRXN0byBleHBsaWNhcsOtYSBlbCBhdW1lbnRvIGRlIGNhc29zLgoKYGBge3IsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHJlc3VsdHM9ImFzaXMifQpjYXRfcGxvdChsdWJyaWRhdGU6OnltZCgiMjAyMC0wMy0xOCIpLCAxMCwgIkFwcm9iYWNpw7NuIGRlbCBQYWRyw7NuIGRlIEhvZ2FyZXMiLCBwbG90X25ld19jYXNlcywgIk51ZXZvcyBjYXNvcyIpCmBgYAogCiNncmFmaWNvIDggbnVldm9zIGNhc29zCiAKU2UgcmVhbGl6w7MgdW4gZi10ZXN0IHNvYnJlIGxvcyBpbnB1dHMgYSBsYSByZWdyZXNpw7NuIGxpbmVhbCBkZWwgbG9nYXJpdG1vIGRlIGxhIGdyw6FmaWNhLCBzaWd1aWVuZG8gZWwgbW9kZWxvIHBsYW50ZWFkbyBhcnJpYmEuIFNlIGNvbG9jw7MgY29tbyBjb250cm9sIGEgdG9kb3MgbG9zIGRhdG9zIHByZXZpb3MgYSBkZWNsYXJhcnNlIGxhIG1lZGlkYS4gU2UgcGxhbnRlYXJvbiBsYXMgc2lndWllbnRlcyBoaXDDs3Rlc2lzOgpIbyA6IE5vIGV4aXN0ZSB1biBlZmVjdG8gc2lnbmlmaWNhdGl2byBkZSBsYSBtZWRpZGEgcG9yIHNvYnJlIGxhIHRlbmRlbmNpYSBkZSBsb3MgbnVldm9zIGNhc29zIGNvbiByZXNwZWN0byBhbCBjb250cm9sLgpIYSA6IEV4aXN0ZW4gdW4gZWZlY3RvIHNpZ25pZmljYXRpdm8gZW50cmUgbGFzIG11ZXN0cmFzIGRlIGNvbnRyb2wgeSBsYSBkYXRhIHBvc3RlcmlvciBhIGxhIGRlY2xhcmFjacOzbi4KCklNQUdFTgoKRGFkbyBxdWUgbGEgcHJpbWVyYSB2YXJpYW56YSBlcyBtYXlvciBhIGxhIHNlZ3VuZGEsIGVsIG9yZGVuIGRlIG9wZXJhY2nDs24gZGUgbG9zIGRhdG9zIGVzIGNvcnJlY3RvLiBDb21vIHRhbCwgZGFkbyBGID4gRi1jcml0aWNvIHVuYSBjb2xhLCBlbmNvbnRyYW1vcyBldmlkZW5jaWEgZW4gY29udHJhIGRlIEhvLiBEYWRvIGFkZW1hcyBQKEY8PWYpIDwgLCBzZSBwdWVkZSBnYXJhbnRpemFyIGxhIGRlY2lzacOzbiBkZSByZWNoYXphciBsYSBoaXDDs3Rlc2lzIG51bGEsIHBvciBsbyBxdWUgZGViZW4gZXhpc3RpciBkaWZlcmVuY2lhcyBzaWduaWZpY2F0aXZhcyBlbnRyZSBsb3MgZGF0b3MuIERhZG8gYWRlbcOhcyBBMT0gMC4yNjcyID4gQTI9MC4wMTE2LCBzZSBwdWVkZSBhZmlybWFyIHF1ZSBsYSBtZWRpZGEgcmVkdWpvIGxhIHRhc2EgZGUgaW5mZWNjacOzbi4KCiNHUkFGSUNPIDkgQ0FNQklPUwoKRXN0YSBncsOhZmljYSwgYWwgaWd1YWwgcXVlIGxhIEdyw6FmaWNhIDcsIG1hbmlmaWVzdGEgdW4gY29tcG9ydGFtaWVudG8gc2ltaWxhci4gU2luIGVtYmFyZ28sIGEgcGFydGlyIGRlIGxhIGRpc21pbnVjacOzbiBkZSBsYSBjdXJ2YSBzZSBwb2Ryw61hbiBnZW5lcmFyIGFsZ3VuYXMgY29uamV0dXJhcy4gTGEgcHJpbWVyYSBkZSBlbGxhcyBlcyBxdWUgbGFzIHBlcnNvbmFzIHRlbsOtYW4gdW4gcmVzcGFsZG8gcGFyYSBwb2RlciBjb21wcmFyIHN1cyBhbGltZW50b3MgeSBtZWRpY2FtZW50b3MgZGUgc2VyIG5lY2VzYXJpbyBwb3IgbG8gcXVlIHlhIG5vIHRlbsOtYW4gcXVlIHNhbGlyIGEgbGFzIGNhbGxlcyBkZSBtYW5lcmEgY29uY3VycmlkYSBhIHZlbmRlciBwcm9kdWN0b3MsIGVudHJlIG90cmFzIGNvc2FzLiBDYWJlIHJlc2FsdGFyIHF1ZSBjb24gZXN0byBubyBxdWVyZW1vcyBkZWNpciBxdWUgbGEgcG9ibGFjacOzbiBubyBzYWzDrWEgeSBxdWUgbGEgbWVkaWRhIGZ1ZSAxMDAlIGVmZWN0aXZhLiBBbCBjb250cmFyaW8sIGxhIHBvYmxhY2nDs24gb2JqZXRpdm8gc2FsacOzIHBhcmEgaGFjZXIgZWwgcmV0aXJvIGRlbCBzdWJzaWRpbyBwb3IgbG8gcXVlIGVsIG7Dum1lcm8gZGUgY2Fzb3MgYXVtZW50w7MuIFNpbiBlbWJhcmdvLCBlc3RvIHRhbWJpw6luIGNvbnRyaWJ1ecOzIGEgcXVlIGVuIGTDrWFzIHBvc3RlcmlvcmVzIHNlIHF1ZWRlbiBlbiBjYXNhLCBkZWJpZG8gYSBxdWUgY29udGFiYW4gY29uIGRpbmVybyBwYXJhIHN1YnNpc3RpciBwb3IgdW4gcGFyIGRlIHNlbWFuYXMgbcOhcyAodmFyw61hIHNlZ8O6biBlbCBuw7ptZXJvIGRlIGludGVncmFudGVzKS4gRXN0YXMgYWZpcm1hY2lvbmVzIHNlIHJlc3BhbGRhbiBjb24gbGEgbWVkaWEgeSBtZWRpYW5hIGFudGVzIGRlbCBkZWNyZXRvIChsw61uZWFzIGNvbnRpbnVhcyksIGRhZG8gcXVlIHNlIHViaWNhIGVuIGxhIHBhcnRlIHN1cGVyaW9yIGRlbCBncsOhZmljbywgbWllbnRyYXMgcXVlIGxhIG1lZGlhIHkgbWVkaWFuYSAobMOtbmVhcyBwdW50ZWFkYXMpIHBvciBkZWJham8gZGUgLTYwLgoKI0dSQUZJQ08gREUgQ0FNQklPUyBSRUNSRUFDSU9OQUxFUyBZIEVTTwoKYGBge3IsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHJlc3VsdHM9ImFzaXMifQpjYXRfcGxvdChsdWJyaWRhdGU6OnltZCgiMjAyMC0wMy0xOCIpLCAxMCwgIkFwcm9iYWNpw7NuIGRlbCBQYWRyw7NuIGRlIEhvZ2FyZXMiLCBwbG90X3Jtb3ZlcywgIk1vdmlsaXphY2nDs24gcmVjcmVhY2lvbmFsIikKYGBgCgpVdGlsaXphbmRvIHVuIHRlc3QtdCBwYXJhIG1lZGlhcyBlbiBhbWJhcyBzZWNjaW9uZXMgZGUgbGEgZ3LDoWZpY2EsIHBvZGVtb3MgZGV0ZXJtaW5hciBzaSBleGlzdGUgdW4gZWZlY3RvIGRlIGxhIG1lZGlkYSBwb3Igc29icmUgbGEgdHJlbmQgZ2VuZXJhbC4KSG8gOiBObyAgZXhpc3RlbiBkaWZlcmVuY2lhcyBzaWduaWZpY2F0aXZhcyBlbnRyZSBhbWJhcyBzZWNjaW9uZXMgZGUgbGEgZ3LDoWZpY2EuCkhhIDogRXhpc3RlbiBkaWZlcmVuY2lhcyBzaWduaWZpY2F0aXZhcyBlbnRyZSBhbWJhcyBzZWNjaW9uZXMgZGUgbGEgZ3LDoWZpY2EuCgpJTUFHRU4KCkRhZG8gcXVlIGVsIGVzdGFkw61zdGljbyB8dHwgPiB0LWNyw610aWNvIGRvcyBjb2xhcywgc2UgZW5jdWVudHJhIGV2aWRlbmNpYSBwYXJhIGZhbHNlYXIgbGEgaGlww7N0ZXNpcyBudWxhLiBEYWRvIHF1ZSBQKFQ8PXQpIDwgLCBsYSBlbGVjY2nDs24gZXMganVzdGlmaWNhYmxlLCBwb3IgbG8gcXVlIHNlIHJlY2hhemEgbGEgaGlww7N0ZXNpcyBudWxhLCBjb25jbHV5ZW5kbyBwb3IgdGFudG8gcXVlIGV4aXN0ZSB1bmEgZGlmZXJlbmNpYSBzaWduaWZpY2F0aXZhIGVudHJlIGFtYmFzIHNlY2Npb25lcyBkZSBsYSBncsOhZmljYS4gRGViaWRvIGEgcXVlIGxhIGNvcnJlbGFjacOzbiBlcyBuZWdhdGl2YSwgc2UgY29uY2x1eWUgcXVlIGxhIG1lZGlkYSByZWR1am8gCgojIyBTYWxpZGEgYWx0ZXJuYWRhIHBvciBnw6luZXJvCgpFbCBncsOhZmljbyAxMCBleGhpYmUgbGEgY2FudGlkYWQgZGUgY2Fzb3MgYW50ZXMgeSBkZXNwdcOpcyBkZSBhcGxpY2Fyc2UgbGEgbWVkaWRhIOKAnFNhbGlkYSBhbHRlcm5hZGEgcG9yIGfDqW5lcm/igJ0uIEVuIHVuIHByaW1lciBtb21lbnRvIGVzdGEgbWVkaWRhIHRlbsOtYSBjb21vIG9iamV0aXZvIGRpc21pbnVpciBlbCBuw7ptZXJvIGRlIGNvbnRhZ2lvcy4gUG9yIHRhbCByYXrDs24sIGVsIEdvYmllcm5vIGRlY3JldMOzIGRldGVybWluYWRvcyBkw61hcyBkZSBzYWxpZGEgcGFyYSBtdWplcmVzIHkgb3Ryb3MgcGFyYSB2YXJvbmVzLCB5IGxvcyBkb21pbmdvcyBuYWRpZSBzYWzDrWEuIE5vIG9ic3RhbnRlLCBhIHBhcnRpciBkZSBsYSByZXByZXNlbnRhY2nDs24gc2UgcHVlZGUgb2JzZXJ2YXIgcXVlIGVsIG7Dum1lcm8gZGUgY2Fzb3MgYXVtZW50w7MgZGUgYXByb3hpbWFkYW1lbnRlIGNpZW4gYSBtaWwgY2llbiBjYXNvcy4gRGVzcHXDqXMgZGUgbG9zIHJlcG9ydGFqZXMgdmlzdG9zLCBwb2Ryw61hbW9zIHRyYXRhciBkZSBleHBsaWNhciBlc3RlIGNvbXBvcnRhbWllbnRvIGJhc8OhbmRvbm9zIGVuIGxvIHNpZ3VpZW50ZTogbGFzIG1hbcOhcyBjb25zaWRlcmFuIHF1ZSBsb3MgdmFyb25lcyAoZXNwb3Nvcykgbm8gc2FiZW4gaGFjZXIgbGFzIGNvbXByYXMgZGUgbWVyY2Fkby4gQWxndW5vcyBkaXLDrWFuIHF1ZSBlc3RvIG5vIHRpZW5lIGZ1bmRhbWVudG8sIHBlcm8gYW5hbGl6YW5kbyBkZXRhbGxhZGFtZW50ZSBsb3MgcmVwb3J0YWplcywgcHVkaW1vcyByZWNvbm9jZXIgcXVlIGVuIGxvcyBkw61hcyBkZSBzYWxpZGEgZGUgbXVqZXJlcyBoYWLDrWEgbXVjaGEgbcOhcyBhZ2xvbWVyYWNpw7NuIHkgZGVzb3JkZW4sIGEgZGlmZXJlbmNpYSBkZSBsb3MgZMOtYXMgZW4gcXVlIGxlcyB0b2NhYmEgc2FsaXIgYSBsb3MgdmFyb25lcy4KCmBgYHtyLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSxyZXN1bHRzPSJhc2lzIn0KI3JlcGVhdF9wbG90cygiMjAyMC0wNC0wMyIsIDEwLCAiU2FsaWRhIGFsdGVybmFkYSBwb3IgZ8OpbmVybyIpCmNhdF9wbG90KGx1YnJpZGF0ZTo6eW1kKCIyMDIwLTA0LTAzIiksIDEwLCAiU2FsaWRhIGFsdGVybmFkYSBwb3IgZ8OpbmVybyIsIHBsb3RfbmV3X2Nhc2VzLCAiTnVldm9zIGNhc29zIikKYGBgCgojR1JBRklDTyAxMCBOVUVWT1MgQ0FTT1MKClBhcmEgY29tcHJvYmFyIGVzdGFkw61zdGljYW1lbnRlIHNpIGVzIHF1ZSBsYSBtZWRpZGEgZnVlIGVmZWN0aXZhIG8gbm8sIHNlIHJlYWxpesOzIGVsIHRlc3QgRiBzb2JyZSBsYSBmb3JtYSBsb2dhcsOtdG1pY2EgZGUgbGEgcmVncmVzacOzbi4gRGViaWRvIGEgcXVlIGxhIHJlZ3Jlc2nDs24gbm8gc2UgY2VudHJhIGVuIDAsIHNlIG5vcm1hbGl6YXJvbiBsb3MgcHVudG9zIHByZXZpYW1lbnRlLiAKCkhvIDogTm8gZXhpc3RlIGRpZmVyZW5jaWFzIHNpZ25pZmljYXRpdmFzIGVudHJlIGxvcyBkb3Mgc2V0cyBkZSBwdW50b3MuIApIYSA6IEV4aXN0ZSBkaWZlcmVuY2lhcyBzaWduaWZpY2F0aXZhcyBlbnRyZSBlbCBzZXQgZGUgcHVudG9zIGFudGVzIHkgZGVzcHVlcyBkZSBhcGxpY2Fyc2UgbGEgbWVkaWRhLgoKSU1BR0VOCgpEYWRvIHF1ZSBGIDwgRi1jcsOtdGljbyB1bmEgY29sYSwgbm8gc2UgcHVlZGUgZmFsc2VhciBsYSBoaXDDs3Rlc2lzIG51bGEuIEFkZW3DoXMsIGNvbW9QKEY8PWYpIHVuYSBjb2xhID4gMC4wNSwgc2UgZGVjaWRlIG1hbnRlbmVyIGxhIGhpcMOzdGVzaXMgbnVsYSwgY29uc2lkZXJhbmRvIHF1ZSBubyBleGlzdGVuIGRpZmVyZW5jaWFzIHNpZ25pZmljYXRpdmFzLiBDb24gZXN0bywgc2UgY29tcHJ1ZWJhIHF1ZSBsYSBtZWRpZGEgbm8gdHV2byDDqXhpdG8gZW4gcmVkdWNpciBsb3MgbnVldm9zIGNhc29zLgoKI0dSQUZJQ08gREUgQ0FNQklPUwoKYGBge3IsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHJlc3VsdHM9ImFzaXMifQpjYXRfcGxvdChsdWJyaWRhdGU6OnltZCgiMjAyMC0wNC0wMyIpLCAxMCwgIlNhbGlkYSBhbHRlcm5hZGEgcG9yIGfDqW5lcm8iLCBwbG90X3Jtb3ZlcywgIk1vdmlsaXphY2nDs24gcmVjcmVhY2lvbmFsIikKYGBgCgpTZSBwdWVkZSBvYnNlcnZhciB1biBsZXZlIGNhbWJpbyBlbiBsYSBwb3NpY2nDs24gZGUgbGFzIG1lZGlhcyBkZSBhbWJvcyBkYXRhc2V0cy4gUGFyYSBjb21wcm9iYXIgbGEgc2lnbmlmaWNhbmNpYSBkZSBlc3RhIGRpZmVyZW5jaWEsIHNlIHBsYW50ZWEgdW4gdGVzdC10LiBBc3VtaWVuZG86CgpIbzogTm8gc2UgcHVlZGUgZW5jb250cmFyIGRpZmVyZW5jaWFzIHNpZ25pZmljYXRpdmFzIGVudHJlIGxhcyBkb3MgZmFzZXMuCgpIYTogRXhpc3RlbiBkaWZlcmVuY2lhcyBzaWduaWZpY2F0aXZhcyBlbnRyZSBhbnRlcyBkZSBkZWNsYXJhcnNlIGxhIG1lZGlkYSB5IHRyYXMgc3UgZWplY3VjacOzbi4KCklNQUdFTgoKRGFkbyBxdWUgfHRTdGF0fCA8IHQgY3JpdGljbyBkb3MgY29sYXMsIG5vIHNlIHB1ZWRlIGVuY29udHJhciBldmlkZW5jaWEgcXVlIG5pZWd1ZSBIby4gRGFkbyBhZGVtw6FzIHF1ZSBQKFQ8PXQpID4gLCBubyBzZSBsbGVnYSBhIHJlY2hhemFyIGxhIGhpcMOzdGVzaXMgbnVsYSwgcG9yIGxvIHF1ZSBzZSBhc3VtZSBxdWUgbm8gZXhpc3RlbiBkaWZlcmVuY2lhcyBzaWduaWZpY2F0aXZhcyB0cmFzIGxhIG1lZGlkYS4KCgojI1Blcm1pc28gZGUgYWRxdWlzaWNpw7NuIGRlIGJpZW5lcyB5IHNlcnZpY2lvcyBiw6FzaWNvcwoKI2dyYWZpY28gZGUgbnVldm9zIGNhc29zCgpFbiBlbCBncsOhZmljbyBuw7ptZXJvIDEyIGhheSB1bmEgb2JzZXJ2YWNpw7NuIG11eSBwb2NvIGV2aWRlbnRlIHF1ZSBzZSBwdWVkZSB2ZXIuIFBvY29zIGTDrWFzIGFudGVyaW9yZXMgYSBsYSBpbXBsZW1lbnRhY2nDs24gZGUgbGEgbWVkaWRhIGVuIGNvbnNpZGVyYWNpw7NuLCBsb3MgbnVldm9zIGNhc29zIGVtcGV6YXJvbiBhIGluY3JlbWVudGFyIGRlc3B1w6lzIGRlIGhhYmVyc2UgbWFudGVuaWRvIHJlbGF0aXZhbWVudGUgY29uc3RhbnRlcyBwb3IgdW4gdGllbXBvLiBFbCBpbmNyZW1lbnRvIGRlIGVzdG9zIG51ZXZvcyBjYXNvcyBhbCBwYXJlY2VyIGZ1ZSBjb250cm9sYWRvIHBvciB1bm9zIGRpYXMgcG9zdGVyaW9yZXMgZGUgc2VyIHRvbWFkYSBsYSBtZWRpZGEuIFNpbiBlbWJhcmdvLCBlbiBsYSBncsOhZmljYSBzZSBwdWVkZSB2aXN1YWxpemFyIHF1ZSBhcHJveGltYWRhbWVudGUgdW5hIHNlbWFuYSBkZXNwdcOpcyBkZSBoYWJlcnNlIHRvbWFkbyBlc3RhIG1lZGlkYSBsb3MgY2Fzb3MgZW1wZXphcm9uIGEgaW5jcmVtZW50YXIgbnVldmFtZW50ZS4KCmBgYHtyLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSxyZXN1bHRzPSJhc2lzIn0KI3JlcGVhdF9wbG90cygiMjAyMC0wNC0yMCIsIDEwLCAiUGVybWlzbyBkZSBhZHF1aXNpY2nDs24gZGUgYmllbmVzIHkgc2VydmljaW9zIGJhc2ljb3MiKQpjYXRfcGxvdChsdWJyaWRhdGU6OnltZCgiMjAyMC0wNC0yMCIpLCAxMCwgIlBlcm1pc28gZGUgYWRxdWlzaWNpw7NuIGRlIGJpZW5lcyB5IHNlcnZpY2lvcyBiYXNpY29zIiwgcGxvdF9uZXdfY2FzZXMsICJOdWV2b3MgY2Fzb3MiKQpgYGAKCgpQYXJhIGNvbXByb2JhciBsYSBzaWduaWZpY2FuY2lhIGRlIGVzdGEgZGlmZXJlbmNpYSwgc2UgcGxhbnRlYSB1biB0ZXN0LWYuIEFzdW1pZW5kbyBhIGxvcyBwdW50b3MgdWJpY2Fkb3MgYW50ZXMgZGUgbGEgYXBsaWNhY2nDs24gZGUgbGEgbWVkaWRhIGNvbW8gY29udHJvbDoKCkhvOiBObyBzZSBwdWVkZSBlbmNvbnRyYXIgZGlmZXJlbmNpYXMgc2lnbmlmaWNhdGl2YXMgZW50cmUgbGEgZmFzZSBkZSBjb250cm9sIHkgdHJhcyBhcGxpY2FyIGxhIG1lZGlkYS4KCkhhOiBFeGlzdGVuIGRpZmVyZW5jaWFzIHNpZ25pZmljYXRpdmFzIGVudHJlIGFudGVzIGRlIGRlY2xhcmFyc2UgbGEgbWVkaWRhIHkgdHJhcyBzdSBlamVjdWNpw7NuLgoKSU1BR0VOCgpEYWRvIEYgPCBGLWNyw610aWNvIHVuYSBjb2xhLCBubyBzZSBlbmN1ZW50cmEgZXZpZGVuY2lhIGVuIGNvbnRyYSBkZSBsYSBoaXDDs3Rlc2lzIG51bGEuIENvbW8gUChGPD1mKT4wLjA1LCBubyBzZSByZWNoYXphIEhvLCBhc3VtaWVuZG8gcG9yIHRhbnRvIHF1ZSBubyBleGlzdGVuIGRpZmVyZW5jaWFzIHNpZ25pZmljYXRpdmFzIGVuIGVsIHJhdGlvIGRlIGFwYXJpY2nDs24gZGUgbnVldm9zIGNhc29zLgoKI2FxdWkgdmEgZWwgZ3JhZmljbyBkZSBjYW1iaW9zCmBgYHtyLGVjaG89RkFMU0UsbWVzc2FnZT1GQUxTRSxyZXN1bHRzPSJhc2lzIn0KI3JlcGVhdF9wbG90cygiMjAyMC0wNC0yMCIsIDEwLCAiUGVybWlzbyBkZSBhZHF1aXNpY2nDs24gZGUgYmllbmVzIHkgc2VydmljaW9zIGJhc2ljb3MiKQpjYXRfcGxvdChsdWJyaWRhdGU6OnltZCgiMjAyMC0wNC0yMCIpLCAxMCwgIlBlcm1pc28gZGUgYWRxdWlzaWNpw7NuIGRlIGJpZW5lcyB5IHNlcnZpY2lvcyBiYXNpY29zIiwgcGxvdF9ybW92ZXMsICJNb3ZpbGl6YWNpw7NuIHJlY3JlYWNpb25hbCIpCmBgYAoKRW4gZXN0YSBncsOhZmljYSBwb2RlbW9zIHZlciBxdWUgbGEgbWVkaWRhIGRlIHBlcm1pc28gZGUgYWRxdWlzaWNpw7NuIGRlIGJpZW5lcyB5IHNlcnZpY2lvcyBiw6FzaWNvcyBubyBhZmVjdMOzIGRlIG1hbmVyYSBldmlkZW50ZSBsYSBtb3ZpbGl6YWNpw7NuIHNvY2lhbCwgeWEgcXVlIG5vIHNlIHB1ZWRlIHZlciB1bmEgcmVkdWNjacOzbiBvIGluY3JlbWVudG8gdG90YWxtZW50ZSBjbGFybyBlbiBsb3MgZMOtYXMgcG9zdGVyaW9yZXMgYSBsYSBpbXBsZW1lbnRhY2nDs24gZGUgZXN0YSBtZWRpZGEuIFNlIHB1ZWRlIG9ic2VydmFyIGVzdG8gbWVkaWFudGUgdW4gdC10ZXN0LiBBc3VtaWVuZG8gYXPDrToKCkhvID0gTm8gZXhpc3RlIGRpZmVyZW5jaWEgYW50ZXMgeSBkZXNwdcOpcyBkZSBhcGxpY2Fyc2UgbGEgbWVkaWRhCgpIYSA9IEV4aXN0ZW4gZGlmZXJlbmNpYXMgc2lnbmlmaWNhdGl2YXMgZW4gbGEgbW92aWxpemFjacOzbiBlbnRyZSBlbCBwZXJpb2RvIHByZXZpbyBhIGxhIGRlY2xhcmFjacOzbiAgeSBlbCBwb3N0ZXJpb3IuCgpJTUFHRU4KCgpEYWRvIHF1ZSB8dHwgPCB0LWNyw610aWNvLCBubyBzZSBwdWVkZSBzb2x2ZW50YXIgbGEgaWRlYSBkZSByZWNoYXphciBsYSBoaXDDs3Rlc2lzIGRpcmVjdGFtZW50ZS4gRGFkbyBhZGVtw6FzIHF1ZSAgUChUPHQpID4gLCBubyBzZSBsbGVnYSBhIHJlY2hhemFyIGNvbXBsZXRhbWVudGUgSG8sIHBvciBsbyBxdWUgc2UgYXN1bWUgcXVlIG5vIGV4aXN0ZW4gZGlmZXJlbmNpYXMgc2lnbmlmaWNhdGl2YXMuCgoKCiMjIyBGcmVjdWVuY2lhIGRlIHNhbGlkYQpgYGB7cn0KZGZfZm9ybTIgJT4lCiAgICBncm91cF9ieShzYWxpZGFzKSAlPiUKICAgIHN1bW1hcmlzZShuPW4oKSkgJT4lCiAgICBiYXJwbG90KG5+c2FsaWRhcywgZGF0YT0uLCB5bGFiID0gIlBlcnNvbmFzIiwgeGxhYj0iU2FsaWRhcyIpCgp0aXRsZSgiU2FsaWRhcyBwb3Igc2VtYW5hIikKYGBgCgojIyMgQ2Fzb3MgcG9yIGRpc3RyaXRvCmBgYHtyLCBmaWcud2lkdGg9MTIsIGZpZy5oZWlnaHQ9MjB9CnBhcihtYWkgPSBjKDEsIDIuNSwgMSwgMC41KSkKZGYgJT4lIGZpbHRlcihQUk9WSU5DSUEgPT0gIkxJTUEiKSAlPiUKICAgIHNlbGVjdChESVNUUklUTykgJT4lCiAgICB0YWJsZSgpICU+JQogICAgc29ydChUUlVFKSAlPiUKICAgIGJhcnBsb3QobGFzPTEsIGhvcml6PVRSVUUsIHhsYWI9IkNhc29zIikKdGl0bGUoIkNhc29zIHBvciBkaXN0cml0byIpCmBgYAojIyMgUmF6b25lcwpgYGB7cn0KCmRmX2Zvcm0yJHJhem9uZXMgJT4lIHVubGlzdCgpICU+JSB0YWJsZSgpIC0+IHJhem9uZXNfdCAKd29yZGNsb3VkKG5hbWVzKHJhem9uZXNfdCksIGFzLnZlY3RvcihyYXpvbmVzX3QpLCBtaW4uZnJlcSA9IDIpCgp0aXRsZSgiUmF6b25lcyBwYXJhIHNhbGlyIGR1cmFudGUgbGEgY3VhcmVudGVuYSIpCmBgYAoKIyMjIE1lZGlkYXMKYGBge3J9CnBhcihtYWkgPSBjKDEsIDIuNSwgMC41LCAwLjUpKQoKKHRhYmxlKGMoCiAgICByZXAoIklubW92aWxpemFjacOzbiIsICAgICAgICAgICAgICAgbGVuZ3RoKHdoaWNoKGRmX2Zvcm0yJHNvY2lhbC5ib29sKSkpLAogICAgcmVwKCJObyBhY2Nlc28gYSBsdWdhcmVzIHDDumJsaWNvcyIsIGxlbmd0aCh3aGljaChkZl9mb3JtMiRvY2lvLmJvb2wpKSksCiAgICByZXAoIlNhbGlkYSBpbnRlcmNhbGFkYSIsICAgICAgICAgICBsZW5ndGgod2hpY2goZGZfZm9ybTIkbm9kYXkuYm9vbCkpKSwKICAgIHJlcCgiQm9ubyIsICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCh3aGljaChkZl9mb3JtMiRib25vLmJvb2wpKSksCiAgICByZXAoIlVuIG1vbnRvIGRlbCBBZnAiLCAgICAgICAgICAgICBsZW5ndGgod2hpY2goZGZfZm9ybTIkYWZwMS5ib29sKSkpLAogICAgcmVwKCJVbiBwb3JjZW50YWplIGRlbCBBZnAiLCAgICAgICAgbGVuZ3RoKHdoaWNoKGRmX2Zvcm0yJGFmcDIuYm9vbCkpKQopKS9sZW5ndGgoZGZfZm9ybTIkc29jaWFsLmJvb2wpKSAlPiUKICAgIHNvcnQoVFJVRSkgJT4lCiAgICBiYXJwbG90KGhvcml6ID0gVFJVRSwKICAgICAgICAgICAgbGFzID0gMSwKICAgICAgICAgICAgeWxhYiA9ICIiLAogICAgICAgICAgICB4bGFiID0gIkFwcm9iYWNpw7NuIgogICAgKQp0aXRsZSgiQXByb2JhY2nDs24gcG9yIG1lZGlkYSAoZGUgMCBhIDEpIikKYGBgCiMjIyBJbm1vdmlsaXphY2nDs24KYGBge3J9CmRmX2Zvcm0yJHNvY2lhbC4wNSAlPiUKICAgIHRhYmxlKCkgJT4lCiAgICBiYXJwbG90KHlsYWI9IlBlcnNvbmFzIikKCnRpdGxlKCJEZSAwIGEgNSwgwr9Dw7phbnRvIGRpc21pbnV5ZXJvbiB0dXMgc2FsaWRhcyBkdXJhbnRlIGxhIGN1YXJlbnRlbmE/IikKYGBgCgojIyMgU3VzcGVuc2nDs24gZGUgYWNjZXNvIGEgbHVnYXJlcyBww7pibGljb3MKYGBge3J9CmRmX2Zvcm0yJG9jaW8uMDUgJT4lCiAgICB0YWJsZSgpICU+JQogICAgYmFycGxvdCh5bGFiPSJQZXJzb25hcyIpCgp0aXRsZSgiRGUgMCBhIDUsIMK/Q8O6YW50byBkaXNtaW51eWVyb24gdHVzIHNhbGlkYXMgZHVyYW50ZSBsYSBjdWFyZW50ZW5hPyIpCmBgYAoKIyMjIERpc3Bvc2ljacOzbiBzYWxpZGEgZGUgaG9tYnJlcyB5IG11amVyZXMgZW4gZMOtYXMgY29tcGxlbWVudGFyaW9zCmBgYHtyfQpkZl9mb3JtMiRub2RheS4wNSAlPiUKICAgIHRhYmxlKCkgJT4lCiAgICBiYXJwbG90KHlsYWI9IlBlcnNvbmFzIikKCnRpdGxlKCJEZWwgMCBhbCA1LCDCv0N1w6FudG8gY2FtYmnDsyB0dXMgc2FsaWRhcz8iKQpgYGAKCiMjIyBNdWx0YSBkZSBTLy44Ni1TLy4zNDAgcGFyYSB0b2RhcyBsYXMgcGVyc29uYXMgcXVlIGRlc29iZWRlY2VuIGRpc3Bvc2ljaW9uZXMgZGVsIGdvYmllcm5vCmBgYHtyfQpkZl9mb3JtMiRtdWx0YS4wNSAlPiUKICAgIHRhYmxlKCkgJT4lCiAgICBiYXJwbG90KHlsYWI9IlBlcnNvbmFzIikKCnRpdGxlKCJEZSAwIGEgNSwgwr9Dw7phbnRvIGRpc21pbnV5ZXJvbiB0dXMgc2FsaWRhcyBkdXJhbnRlIGxhIGN1YXJlbnRlbmE/IikKYGBgCgojIyMgRW50cmVnYSBkZSBib25vIFMvLiAzODAsIFMvLjc2MCBkZSBhY3VlcmRvIGFsIFNpc3RlbWEgZGUgRm9jYWxpemFjacOzbiBkZSBIb2dhcmVzIChTSVNGT0gpCmBgYHtyfQpkZl9mb3JtMiRib25vLjA1ICU+JQogICAgdGFibGUoKSAlPiUKICAgIGJhcnBsb3QoeWxhYj0iUGVyc29uYXMiKQoKdGl0bGUoIkRlbCAwIGFsIDUsIMK/Q3XDoW50byBzZSByZWR1am8gdHVzIHNhbGlkYXM/IikKYGBgCgojIyMgUmV0aXJvIGRlIGhhc3RhIFMvLiAyMDAwIGRlIGZvbmRvcyBBRlAgZGUgdHJhYmFqYWRvcmVzIGFmaWxpYWRvcyBxdWUgbm8gdGllbmVuIHBsYW5pbGxhCmBgYHtyfQpkZl9mb3JtMiRhZnAxLjA1ICU+JQogICAgdGFibGUoKSAlPiUKICAgIGJhcnBsb3QoeWxhYj0iUGVyc29uYXMiKQoKdGl0bGUoIkRlbCAwIGFsIDUsIMK/IEN1w6FuIG3DoXMgdGUgbWFudHV2aXN0ZSBlbiBjYXNhPyIpCmBgYAoKIyMjIFJldGlybyBkZWwgIDI1JSBkZSBmb25kb3MgQUZQIHBhcmEgdHJhYmFqYWRvcmVzIGFmaWxpYWRvcwpgYGB7cn0KZGZfZm9ybTIkYWZwMi4wNSAlPiUKICAgIHRhYmxlKCkgJT4lCiAgICBiYXJwbG90KHlsYWI9IlBlcnNvbmFzIikKCnRpdGxlKCJEZWwgMCBhbCA1LCDCv0N1w6FudG8gdGllbXBvIG3DoXMgdGUgbWFudHV2byBlbiBjYXNhPyIpCmBgYAoKIyMjIERpc3RyaXRvIHZzIGluZ3Jlc28KYGBge3IsIGZpZy53aWR0aD0xMiwgZmlnLmhlaWdodD0yMH0KIyBObyBzdXBlIGNvbW8gaGFjZXJsbyBjb24gdmFuaWxsYSBSCmdncGxvdChhZXMoeSA9IGRpc3RyaXRvLCB4ID0gaW5ncmVzbyksIGRhdGEgPSBkZl9mb3JtMikgKwogICAgZ2VvbV9ib3hwbG90KCkgKwogICAgZ2d0aXRsZSgiRGlzdHJpdG9zIHZzIGluZ3Jlc29zIikgKwogICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkpCmBgYAojIyMgRGlzdHJpdG8gdnMgY2Fzb3MKYGBge3J9CnBhcihtYWkgPSBjKDEsIDIsIDAuMiwgMC41KSkKZGYgJT4lIGZpbHRlcihQUk9WSU5DSUEgPT0gIkxJTUEiKSAlPiUKICAgIGZpbHRlcihESVNUUklUTyAlaW4lIGMoIk1JUkFGTE9SRVMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiQkFSUkFOQ08iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiU0FOIElTSURSTyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJTQU5USUFHTyBERSBTVVJDTyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJTQU4gQk9SSkEiKQogICAgICAgICAgICkgLT4gaW5mZWN0YWRvc181ICMgRXMgbmVjZXNhcmlvIGx1ZWdvCgppbmZlY3RhZG9zXzUgJT4lCiAgICBzZWxlY3QoRElTVFJJVE8pICU+JQogICAgdGFibGUoKSAlPiUKICAgIHNvcnQoVFJVRSkgJT4lCiAgICBiYXJwbG90KGxhcz0xLCBob3Jpej1UUlVFLCB4bGFiPSJDYXNvcyIpCnRpdGxlKCJDYXNvcyBlbiBhbGd1bm9zIGRpc3RyaXRvcyIpCmBgYAoKIyMjIERpc3RyaXRvIHZzIGluZ3Jlc28gb3RyYSB2ZXoKYGBge3J9CmRmX2Zvcm0yICU+JQogICAgZmlsdGVyKGRpc3RyaXRvICVpbiUgYygiTWlyYWZsb3JlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJCYXJyYW5jbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJTYW4gSXNpZHJvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNhbnRpYWdvIGRlIFN1cmNvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNhbiBCb3JqYSIpCiAgICAgICAgICAgKSAtPiBkZl81CmdncGxvdChhZXMoeSA9IGRpc3RyaXRvLCB4ID0gaW5ncmVzbyksIGRhdGEgPSBkZl81KSArCiAgICBnZW9tX2JveHBsb3QoKSArCiAgICBnZ3RpdGxlKCI1IGRpc3RyaXRvcyB2cyBpbmdyZXNvcyIpICMgQcO6biBubyBoYSByZXNwb25kaWRvIG5hZGllIGRlIE1pcmFmbG9yZXMuCmBgYAoKIyMjIERpc3RyaXRvIHZzIGVtcGxlbwpgYGB7cn0KZ2dwbG90KGFlcyh5ID0gZGlzdHJpdG8sIHggPSBlbXBsZW8pLCBkYXRhID0gZGZfNSkgKwogICAgZ2VvbV9ib3hwbG90KCkgKwogICAgZ2d0aXRsZSgiNSBkaXN0cml0b3MgdnMgdGlwbyBkZSBlbXBsZW8iKQpgYGAKCiMjIyBEZXNhY2VsZXJhY2nDs24gZGVsIGNvbnRhZ2lvCmBgYHtyfQpkZl9mb3JtMiRkZWNjZWxlcmF0aW9uICU+JQogICAgdW5saXN0KCkgJT4lCiAgICB0YWJsZSgpICU+JQogICAgc29ydChUUlVFKSAlPiUKICAgIGtuaXRyOjprYWJsZShjb2wubmFtZXMgPSBjKCJNZWRpZGEiLCAiUGVyc29uYXMgcXVlIGxvIGFwcnVlYmFuIikpCmBgYAoKIyMjIEFjZWxlcmFjacOzbiBkZWwgY29udGFnaW8KYGBge3J9CmRmX2Zvcm0yJGFjY2VsZXJhdGlvbiAlPiUKICAgIHVubGlzdCgpICU+JQogICAgdGFibGUoKSAlPiUKICAgIHNvcnQoVFJVRSkgJT4lCiAgICBrbml0cjo6a2FibGUoY29sLm5hbWVzID0gYygiRmFjdG9yIiwgIlBlcnNvbmFzIHF1ZSBsbyBhcHJ1ZWJhbiIpKQpgYGAKCiMjIERlc2NyaXB0b3JlcyBudW3DqXJpY29zIHBhcmEgbGFzIHZhcmlhYmxlcyBkZSBtYXlvciBpbXBvcnRhbmNpYToKCiMjIyBEYXRhIHdlYgoqIEZyZWN1ZW5jaWEgZGUgc2FsaWRhIGRlIHBlcnNvbmFzIChhbnRlcyB5IGRlc3B1w6lzKTogVXRpbGl6YW1vcyBtZWRpYW5hIHkgbWVkaWEuCiogQ2FudGlkYWQgZGUgaW5mZWN0YWRvcyBwb3IgZMOtYTogVXRpbGl6YW1vcyBtZWRpYS4KKiBFZGFkOiBVdGlsaXphbW9zIGxhIG1lZGlhbmEgcGFyYSByZWxhY2lvbmFyIHJhbmdvcyBkZSBlZGFkZXMgY29uIGxhcyByZXB1ZXN0YXMgYnJpbmRhZGFzIHBvciBsYXMgcGVyc29uYXMgZW4gbGFzIGVuY3Vlc3Rhcy4KCiMjIyBFbmN1ZXN0YXMKU2UgcmVhbGl6YXLDoSB1bmEgZW5jdWVzdGEgcGFyYSBhcHJveGltYWRhbWVudGUgMTAwIHBlcnNvbmFzLCBlbiBlbCBjdWFsIHNlIGZvcm11bGFyw6FuIHByZWd1bnRhcyBjb24gbGFzIHNpZ3VpZW50ZXMgdmFyaWFibGVzOgoqIEZyZWN1ZW5jaWEgZGUgc2FsaWRhIHByb21lZGlvIGFsIGTDrWEgYW50ZXMgZGVsIGluaWNpbyBkZSBjdWFyZW50ZW5hCiogRnJlY3VlbmNpYSBkZSBzYWxpZGEgcHJvbWVkaW8gYWwgZMOtYSBsdWVnbyBkZSBsYSBtZWRpZGEgZGVsIGdvYmllcm5vCiogQ2FudGlkYWQgIGFwcm94aW1hZGEgZGUgcGVyc29uYXMgcXVlIG9ic2VydsOzIGVuIGx1Z2FyZXMgcMO6YmxpY29zIChtZXJjYWRvLCBob3NwaXRhbCkgbHVlZ28gZGUgYXBsaWNhZGFzIGxhcyBtZWRpZGFzIGRlbCBnb2JpZXJuby4gRXN0byBzZSBtZWRpcsOhIG1lZGlhbnRlIHVuIGluZGljYWRvciBjYXRlZ8OzcmljbyBvcmRpbmFsLgoqIENhbnRpZGFkIGRlIHBlcnNvbmFzIGFwcm94aW1hZGEgcXVlIG9ic2VydsOzIGN1bXBsaXIgY29uIGVsIGRpc3RhbmNpYW1pZW50byBzb2NpYWwgZGUgMSBtZXRybywgbHVlZ28gZGUgbGFzIG1lZGlkYXMgZGVsIGdvYmllcm5vLiBFc3RvIHNlIG1lZGlyw6EgbWVkaWFudGUgdW4gaW5kaWNhZG9yIGNhdGVnw7NyaWNvIG9yZGluYWwKKiBUaXBvIGRlIHRyYWJham8gKGZvcm1hbCAvIGluZm9ybWFsKQoqIEVkYWQKKiBHw6luZXJvCiogRGlzdHJpdG8KKiBDbGFzZSBzb2NpYWwKKiBOaXZlbCBlZHVjYXRpdm8KCiMgRGVzY3JpcHRvcmVzIGdyw6FmaWNvcwoKVXRpbGl6YXJlbW9zOgoKR3LDoWZpY2EgZGUgZGlzcGVyc2nDs24gcGFyYSBub3RhciBmw6FjaWxtZW50ZSBjb21vIGF1bWVudGEgbyBkZWNyZWNlIGxhIGNhbnRpZGFkIGRlIGluZmVjdGFkb3MgZSBpbmZlY3RhZG9zIHBvciBkaWEgYW50ZXMgeSBkZXNwdcOpcyBkZSBxdWUgc2UgYXBsaXF1ZSBsYSBtZWRpZGEuCkFkZW3DoXMsIGxhIGdyw6FmaWNhIGRlIGRpc3BlcnNpw7NuIG5vcyBwdWVkZSBheXVkYXIgYSBlbmNvbnRyYXIgdW5hIHJlbGFjacOzbiB5L28gcGF0csOzbiBlbnRyZSBsYSBjYW50aWRhZCBkZSBpbmZlY3RhZG9zIHkvbyBtb3ZpbGl6YWNpw7NuIHNvY2lhbCB5IGxvcyBkw61hcyB0cmFuc2N1cnJpZG9zIGRlc2RlIHF1ZSBzZSBlbXBsZcOzIGNhZGEgbWVkaWRhLgoKIyBPYnRlbmNpw7NuIHkgUHJvY2VzYW1pZW50byBkZSBSZXN1bHRhZG9zCgoKYGBge3IsZWNobz1GQUxTRSxtZXNzYWdlPUZBTFNFLHJlc3VsdHM9ImFzaXMifQpyZXBlYXRfcGxvdHMoIjIwMjAtMDMtMTUiLCAxMCwgIkRlY2xhcmFjacOzbiBkZSBFc3RhZG8gZGUgRW1lcmdlbmNpYSIpCnJlcGVhdF9wbG90cygiMjAyMC0wMy0xOCIsIDEwLCAiQXByb2JhY2nDs24gZGVsIFBhZHLDs24gZGUgSG9nYXJlcyIpCnJlcGVhdF9wbG90cygiMjAyMC0wNC0wMyIsIDEwLCAiU2FsaWRhIGFsdGVybmFkYSBwb3IgZ8OpbmVybyIpCnJlcGVhdF9wbG90cygiMjAyMC0wNC0yMCIsIDEwLCAiUGVybWlzbyBkZSBhZHF1aXNpY2nDs24gZGUgYmllbmVzIHkgc2VydmljaW9zIGJhc2ljb3MiKQpgYGAKCiMgRGlzY3VzacOzbiBkZSByZXN1bHRhZG9zCgojIyBQYXRyb25lczoKKiBQdWRpbW9zIG5vdGFyIHF1ZSBsYSBjdXJ2YSBkZSBjYXNvcyB0b3RhbGVzIG11ZXN0cmEgdW4gY3JlY2ltaWVudG8gY29udGludW8gZW4gZWwgdGllbXBvLCBldmlkZW5jacOhbmRvc2UgdW4gaW5jcmVtZW50byBkZSBwZXJzb25hcyBpbmZlY3RhZGFzIHNpZ25pZmljYXRpdm8gIGVudHJlIGFudGVzIHkgZGVzcHXDqXMgZGUgaGFiZXIgdG9tYWRvIGNhZGEgbWVkaWRhLgoqIEVuIGN1YW50byBhIGxvcyBudWV2b3MgY2Fzb3MgcG9yIGTDrWEgcHVkaW1vcyBub3RhciBxdWUgdG9kYXMgbGFzIGdyw6FmaWNhcyBtdWVzdHJhbiB1bmEgdmFyaWFjacOzbiBjb25zaWRlcmFibGUgZW4gbGEgY2FudGlkYWQgZGUgY2Fzb3MgZGlhcmlvcyBwb2NvcyBkw61hcyBkZXNwdcOpcyBkZSBxdWUgc2UgYXBsaWNhcmEgY2FkYSBtZWRpZGEuIEVzdGFzIHZhcmlhY2lvbmVzIHNlIHZlbiBjb21vIGRhdG9zIGF0w61waWNvcyBlbiBsYXMgZ3LDoWZpY2FzLgoqIEVuIGxhcyBncsOhZmljYXMgZGUgbW92aWxpemFjacOzbiBzb2NpYWwgc2kgc2UgcHVlZGUgdmVyIGNsYXJhbWVudGUgZWwgZWZlY3RvIGRlIGxhcyBtZWRpZGFzIHJlc3BlY3RpdmFzIGVuIGVsbGFzLiBFbCBlc3RhZG8gZGUgZW1lcmdlbmNpYSBoaXpvIHF1ZSBsYSBtb3ZpbGl6YWNpw7NuIHNvY2lhbCBkaXNtaW51eWVyYSBlbiBncmFuIG1lZGlkYSB5IGxhIG5vcm1hIGRlIHNhbGlyIGTDrWFzIGVzcGVjw61maWNvcyBkZSBsYSBzZW1hbmEgdGFtYmnDqW4gdHV2byB1biBpbXBhY3RvIGVuIGxhIG1vdmlsaXphY2nDs24gY2llcnRvcyBkw61hcyBkZSBsYSBzZW1hbmEuCgoKIyBCaWJsaW9ncmFmw61hCgotIEdvb2dsZSBMTEMuICgyMDIwKS4gR29vZ2xlIENPVklELTE5IENvbW11bml0eSBNb2JpbGl0eSBSZXBvcnRzIFBlcnUuLiBSZWN1cGVyYWRvIGVsIDcgZGUgbWF5byBkZSAyMDIwLCBkZSBHb29nbGUgTExDIFNpdGlvIFdlYjogaHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vY292aWQxOS9tb2JpbGl0eS8yMDIwLTA0LTExX1BFX01vYmlsaXR5X1JlcG9ydF9lbi5wZGYKLSBBbsOzbmltbyAoMjAyMCkuIEFjY2lvbmVzIGFkb3B0YWRhcyBwb3IgZWwgZ29iaWVybm8gYW50ZSBDT1ZJRC0xOS4gUmVjdXBlcmFkbyBlbCA3IGRlIG1heW8gZGUgMjAyMCwgZGUgVmVsb3NlIFNpdGlvIFdlYjogaHR0cHM6Ly93d3cudmVsb3NlLnBlL25vdGljaWFzL2FjY2lvbmVzLWFkb3B0YWRhcy1wb3ItZWwtZ29iaWVybm8tYW50ZS1jb3ZpZC0xOS8KLSBHb2JpZXJubyBkZWwgUGVyw7ogKDIwMjApLiBOb3JtYXRpdmEgc29icmUgRXN0YWRvIGRlIEVtZXJnZW5jaWEgcG9yIENvcm9uYXZpcnVzLiBSZWN1cGVyYWRvIGVsIDcgZGUgbWF5byBkZSAyMDIwIGRlIFBsYXRhZm9ybWEgZGlnaXRhbCBkZWwgRXN0YWRvIFBlcnVhbm8gU2l0aW8gV2ViOiBodHRwczovL3d3dy5nb2IucGUvaW5zdGl0dWNpb24vcGNtL2NvbGVjY2lvbmVzLzc4Ny1ub3JtYXRpdmEtc29icmUtZXN0YWRvLWRlLWVtZXJnZW5jaWEtcG9yLWNvcm9uYXZpcnVzCi0gRGVmZW5zb3LDrWEgZGVsIFB1ZWJsbyAoMjAyMCkuIENPTVBFTkRJTyBERSBOT1JNQVMgRU1JVElEQVMgUE9SIEVMIEVTVEFETyBQRVJVQU5PIFBBUkEgQUZST05UQVIgTEEgUFJPUEFHQUNJw5NOIERFTCBDT1ZJRC0xOS4gUmVjdXBlcmFkbyBlbCA3IGRlIG1heW8gZGUgMjAyMCBkZSBEZWZlbnNvcmlhIGRlbCBQdWVibG8gU2l0aW8gV2ViOiBodHRwczovL3d3dy5kZWZlbnNvcmlhLmdvYi5wZS93cC1jb250ZW50L3VwbG9hZHMvMjAyMC8wNS9Db21wZW5kaW8tZGUtTm9ybWFzLUNPVklEMTktMDcuMDUuMjAyMC5wZGYK